12 комментариев

SergeyKandalintsev
Хз что имеется ввиду? Поиск среднего? Даже как-то рука не поднимается здесь что-то «улучшать» :)
maximgrigorev
  • maximgrigorev
  • 0
  • Комментарий отредактирован 2015-01-24 14:03:07 пользователем maximgrigorev
Видимо да, но здесь есть 2 момента которые в данном случае не очень исправят положение, но все же на них стоит обратить внимание:
1. нет условия выхода из цикла, то есть может возникнуть ситуация что a > b и тогда цикл будет идти бесконечно.
2. Не самая лучшая идея сравнивать числа типа double через ==, чтобы в этом убедиться достаточно посмотреть на следующий код (который выдаст «False»)
System.out.println(0.1 + 0.2 == 0.3 ? "True":"False")
Speliy
почему double себя так ведет? как сравнивать их?
maximgrigorev
Это происходит из-за того что не всегда возможно дробную часть из двоичной системы исчисления точно преобразовать в десятичную, результат сложения 0.1 + 0.2 = 0.30000000000000004 что явно больше чем 0.3
Чтоб не возникало ошибки можно либо брать оба числа с определенной точностью, либо использовать специальные методы (к сожалению я их не знаю так как пока не сталкивался с данной проблемой, можешь поискать в библиотеке Math)
Izhak
System.out.println ((a+b)/2);
SergeyKandalintsev
какой результат выведет приведенный код? какой результат выведет твой код?
Spitfire
Вывод вроде одинаковый. Единственно отличие — переменные останутся неизменными.
Izhak
Предлагаю запустить
billybonce
Ну тогда воплощая комменты выше


double a = (47+94)/2d;
double b = a;
System.out.println(a);
Izhak
  • Izhak
  • 0
  • Комментарий отредактирован 2014-05-07 18:28:00 пользователем Izhak
Ну тогда уж, если не используем константы, то так
double a, b;
a = (47d + 94) / 2;
b = a;
System.out.println (a);


Или просто
System.out.println ((47d + 94) / 2);

:^)
profeg
  • profeg
  • 0
  • Комментарий отредактирован 2015-01-16 02:27:41 пользователем profeg
Может так?

double a = 47.0,b = 94.0;
for (;; a += .5,b -= .5) {
   if ((a-b) == 0) {
   System.out.print(a);
   return;
   }
}

или так

for (; (a-b) != 0; a += .5,b -= .5) { }
System.out.print(a);

только непонятно зачем =))
L2CCCP

		double a = 20, b = 94;
		do
		{
			a += .5;
			b -= .5;
		} while(a != b);
		
    System.out.println(a);



Но цикл не совсем подходит для такой задачи, можно решить это быстрее и правильней.


		double a = 20.5, b = 94.;
		final double min = Math.min(a, b);
		final double max = Math.max(a, b);
		final double diff = (max - min) / 2;
		a += diff;
		System.out.println(a);

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.