2017-02-21 6 views
0

작동하는 재귀적인 바빌론의 제곱근 방법을 만들었지 만 오류를 통합하려고합니다. 테스트 번호가 + 또는 - 실제 제곱근에 대한 오류 일 때 프로그램을 중지하고 싶습니다. 이 경우 5.015는 실제 제곱근 (0.1)의 0.1 이내이므로 프로그램은 5.015 ...에서 중단됩니다.작업 재귀 babylonian 제곱근, 오류를 통합해야합니다.

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); 
} 

} 

출력 :

당신은 문 수가 targetnum-errortargetnum+error의 범위 내에 있는지 확인하는 경우를 변경해야
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

확인 감사를 알려셔서. 질문이 뭐야? 이것은 두 숫자를 빼고, 절대 값 (필요한 경우)을 취하여 if 문으로 가져 오는 간단한 문제일까요? – tnw

+1

그 수표를 프로그램에 넣을 수없는 이유가 있습니까? 그것은 아주 단순한 조건처럼 보입니다. –

+1

오류를 정의하는 방법이 확실합니까? 수치 계산에서 항상 쉽게 사용할 수있는 "진정한"답변을 얻을 수있는 권한이 항상있는 것은 아니므로 일반적으로 오류 값은 다르게 사용됩니다 (예 : 두 번의 연속 된 반복 결과의 차이 또는 역 계산을 할 때의 차이). – RealSkeptic

답변

1

:

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

아, 맞아요 @ 실례입니다. 그에 따라 내 대답을 업데이트했습니다. – Peter

+0

둘 다 감사합니다! 이것은 내가 필요한 것입니다. – dguerrero