2017-02-21 61 views
0

我已經創建了一個工作遞歸巴比倫平方根方法,但是我想引入一個錯誤。當測試編號爲+或 - 實際平方根的錯誤時,我希望程序停止。在這種情況下,程序將停止在5.015 ....因爲5.015在真實平方根(5)的0.1之內。工作遞歸巴比倫平方根,需要合併一個錯誤。

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

好的謝謝你讓我們知道。你有什麼問題?這不僅僅是減去兩個數字,取絕對值(如果需要)以及將它彈入if語句的簡單問題? – tnw

+1

你有沒有理由不能在你的程序中放入這張支票?這似乎是一個相當簡單的條件。 –

+1

你確定這就是你想要定義錯誤的方式嗎?在數值計算中,您並不總是有一個容易得到的「真實」答案的特權,所以通常錯誤值的使用方式不同(例如,兩次連續迭代中的結果之間的差異,或者您進行反向計算時的差異)。 – RealSkeptic

回答

1

你需要改變你的if語句來檢查,如果數是targetnum-errortargetnum+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