2017-09-03 19 views
0

私はJavaScriptで書かれたバビロニアの平方根アルゴリズムを探して、この作業溶液がわかった。バビロニアの平方根アルゴリズム - 初期推測値

function sqrt(num) { 
    var accuracy = 0.000001; 

    function isPrecise(estimation) { 
    if (Math.abs(Math.pow(estimation, 2) - num) < accuracy) { 
     return true 
    } else { 
     return false 
    } 
    } 

    function improvePrecision(estimation) { 
    return (estimation + (num/estimation))/2; 
    } 

    function iteration(estimation) { 
    if(isPrecise(estimation)) { 
     return estimation; 
    } else { 
     return iteration(improvePrecision(estimation)); 
    } 
    } 

    return iteration(num); 
} 

をしかし、コード内の最初の推測が(ここで私が見ることができません - estimation)値が定義されています。最初の反復で推測値が存在しないときの動作はどうですか?実際には、この値はnum引数に一致する必要があります。

+0

関数の引数を最初の推測として渡します。それはそれを行う呼び出し元です。 – duffymo

+0

妥当な番号範囲の 'num'の実装はOKです。しかし、非常に小さな数字(1e-20)、非常に大きな数字(1e20)、ゼロ、または負の数については、結果が悪くなるか無期限に実行されると思います。 –

答えて

1

estimationは反復関数の中で定義されています。

この関数が最初に実行されるとき、numパラメータreturn iteration(num)を使用して反復関数が呼び出されます。

iterationの内部に、アルゴリズムは最初に推定がOKであるかどうかをチェックします。

がない場合は、iterationが再び呼び出されたが、今回は、それが最初に与えられたestimationを向上させ

return iteration(improvePrecision(estimation));

のでiteration推定が十分に正確でない限り、自分自身を呼び出す再帰関数は、次のとおりです。(isPrecise(estimation)