2017-02-21 4 views
0

私は働く再帰的なバビロニア平方根法を作成しましたが、私は誤差を組み入れたいと思います。私はテスト番号が+または - 実際の平方根のエラーであるときにプログラムを停止したい。この場合、5.015は実際の平方根(5)の0.1以内にあるので、プログラムは5.015で停止します。作業再帰的なバビロニア平方根、エラーを組み込む必要があります。

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]を感謝します。あなたの質問は何ですか?これは、2つの数値を減算し、絶対値(必要な場合)をとり、それをif文にポップする単純な問題ではありませんか? – tnw

+1

プログラムにチェックを入れるだけの理由はありますか?それはむしろ単純な状態のようです。 –

+1

あなたはエラーをどのように定義したいのですか?数値計算では、容易に利用できる「真の」回答の特権を必ずしも持っているわけではないので、通常、エラー値は別々に使用されます(たとえば、2回の連続した反復での結果と逆の計算)。 – 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

関連する問題