2017-02-21 3 views
0

Я создал рабочий рекурсивный метод вавилонского квадратного корня, но я хотел бы включить ошибку. Я хочу, чтобы программа остановилась, когда номер теста + или - ошибка для реального квадратного корня. В этом случае программа остановится на 5.015 .... так как 5.015 находится в пределах 0,1 от реального квадратного корня (5).Работая рекурсивный вавилонский квадратный корень, необходимо включить ошибку.

public class BabyRoot { 
private static double testnum = 0; 
private static double targetnum = 0; 
private static double error = 0; 

public static void babyRoot(double num) { 
    testnum = 0.5 * (testnum + (targetnum/testnum)); 
    System.out.println("Test number equals: " + testnum); 
    if ((testnum * testnum) == targetnum) 
     System.out.println("The correct square root is: " + testnum); 
    else 
     babyRoot(testnum); 
} 

public static void main(String[] args) { 
    error = 0.1; 
    testnum = 25; 
    targetnum = testnum; 
    babyRoot(testnum); 
} 

} 

Выход:

Test number equals: 13.0 

Test number equals: 7.461538461538462 

Test number equals: 5.406026962727994 

Test number equals: 5.015247601944898 

Test number equals: 5.000023178253949 

Test number equals: 5.000000000053722 

Test number equals: 5.0 

The correct square root is: 5.0 
+2

Ok спасибо за давая нам знать. Каков твой вопрос? Разве это не просто вопрос вычитания двух чисел, принятия абсолютного значения (если необходимо) и ввода его в оператор if? – tnw

+1

Есть ли причина, по которой вы не можете просто поставить эту проверку в свою программу? это похоже на довольно простое условие. –

+1

Вы уверены, что именно так вы хотите определить ошибку? В числовых вычислениях вы не всегда обладаете привилегией легкодоступного «истинного» ответа, поэтому обычно значение ошибки используется по-разному (например, разница между результатом в двух последовательных итерациях или разность при обратном вычислении). – RealSkeptic

ответ

1

Вы должны изменить свой, если заявление, чтобы проверить, если число находится в пределах диапазона targetnum-error и targetnum+error:

public static void babyRoot(double num , double err) 
{ 
    testnum = 0.5 * (testnum + (targetnum/testnum)); 
    System.out.println("Test number equals: " + testnum); 

    if ((testnum >= (Math.sqrt(targetnum) - err)) && 
     (testnum <= (Math.sqrt(targetnum) + err))) 
     System.out.println("The correct square root is: " + testnum); 
    else 
     babyRoot(testnum); 
} 
+2

А вы правы @RealSkeptic. Я соответствующим образом обновил свой ответ. – Peter

+0

Спасибо вам всем! Это именно то, что мне нужно. – dguerrero

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