2013-08-07 11 views
6

次のコードは、Heronの方法を使用して平方根を返します。私はそれに "バグ"を見つけようとしていますが、正直言って私はそれを見つけられませんでした。私は "var prevGuess = n"ステートメントに関する質問があります。 "n"はどのようにして初めて動作するのですか?それはバグですか、何が "修正?"ここでHeronのメソッドJavaScript

おかげで、私は、現時点では少し混乱しています......

function heronSqrt(n) 
{ 
    var DELTA = 1.0E-10; 
    var nextGuess; 
    var prevGuess = n; 
    do 
    { 
     nextGuess = (prevGuess + (n/prevGuess))/2; 
     prevGuess = nextGuess; 
    } while (nextGuess-prevGuess > DELTA) 
    return nextGuess; 
} 
+0

「n」がパラメータとして関数に渡されます –

+4

なぜバグを見つけようとしていますか?正しい結果が得られていませんか? –

+0

@DominicBarnesこれは宿題かもしれませんし、何か問題があるかどうかを調べる必要があります。 –

答えて

3

は作業バージョンです:

function heronSqrt(n) 
{ 
    var DELTA = 1.0E-10; 
    var nextGuess = n; 
    var prevGuess; 
    do 
    { 
     prevGuess = nextGuess; 
     nextGuess = (prevGuess + (n/prevGuess))/2; 
    } while (Math.abs(nextGuess-prevGuess) > DELTA) 
    return nextGuess; 
} 

二つの問題がありました。まず、の制限チェックを行う前に、 "prevGuess" を更新していました。次に、推測の違いの絶対値を調べる必要があります。私は初期値を入力値に初期化された "nextGuess"に変更し、 "prevGuess"への更新をループの最初の行に移動し、Math.abs()への呼び出しを追加しました。

これをより広い範囲の値に適用するには、と考えてください。 "DELTA"の値を "n"の大きさに比例させる必要があります。これを巨大な数値で試してみると、おそらく収束しません。