2014-06-06 2 views
0

Я хочу сделать программу, которая использует вавилонский алгоритм для вычисления квадратного корня из положительного числа п следующим образом:вавилонский алгоритм в Java

  1. Сделать предположение в ответе (вы можете выбрать п/2 как ваше первоначальное предположение).
  2. Вычисление r = n/guess.
  3. Set guess = (guess + r)/2
  4. Вернитесь к шагу 2, пока последние два значения предположения не будут находиться в пределах 1% друг от друга.

Теперь это мой код.

double n = input.nextDouble(); 
double guess = n/2; 

    while() 
    { 
     double r = n/guess; 
     guess = (guess + r)/2; 
     System.out.println(guess); 

    } 

Как я могу заставить цикл прекратить итерацию, когда угадание находится в пределах 1% от предыдущей догадки? Я не получаю эту часть, «догадка в пределах 1% от предыдущей догадки».

+0

Отслеживайте последнего угадывания с помощью другой переменной и вычислить разность% ((ток-последний)/последний) * 100 и ломаться, когда это меньше, чем .01 –

ответ

2

Это должно сделать трюк:

double n = input.nextDouble(); 
double guess = n/2; 

double pctDiff = Double.MAX_VALUE; 
double lastGuess = guess; 

    while (Math.abs(pctDiff) >= 0.01) 
    {       
     double r = n/guess; 
     guess = (guess + r)/2; 
     pctDiff = ((guess-lastGuess)/lastGuess); // normally, multiply by 100, but don't need to necessarily... 
     lastGuess = guess; 
     System.out.println(guess); 

    } 
+0

Не должна быть разница в процентах (большое количество - небольшое число)/большое число? В вашем коде lastGuess всегда меньше. –

+0

не имеет значения, результат вычисляется как абсолютное значение. Формула в письменной форме дает изменение%, которое может быть отрицательным. –

+0

Получил это. Спасибо :) –

0

Сохраните предыдущие и текущие догадки в отдельных переменных. Тогда просто введите оператор if, чтобы проверить, насколько далеко ваш currentGuess находится от previousGuess.

+0

Я бы поставил чек в состояние цикла while, а не в оператор if: в то время как петли без условия редко бывают хорошими. – dwarduk

Смежные вопросы