2017-09-08 7 views
-1

私は10の数値要素の配列の単純な合計をしようとしています。
私は、特定の値の配列でのみ発生する完全に間違った結果を得る、そうでなければうまくいきます。Javascriptの単純な合計のバグ

var sum = 0; 
 
var values = [14, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4]; 
 
for (var i = 0; i < values.length; i++) { 
 
    var v = values[i]; 
 
    sum += v; 
 
} 
 
console.log(sum);

期待される結果は0ですが、私は妙に-2.22を入手します!
それ以外の場合は、小数点以下の桁数で結果を出しました。
この場合、これらの数字では、その種のバグはばかげています。

+0

浮動小数点演算から残った '-2.220446049250313e-15'を参照してください。 –

+2

-2.22ではなく-2.2 * 10 ^(-15)です。 –

+1

(上記のコメントを明確にするために、1/-1よりもかなり小さい小数値です。) – deceze

答えて

0

コードはうまく動作し、浮動小数点数の不正確さと関係します。 10によってそれぞれの値は、あなたの計算の最終結果を実行する前に(その1.4が14になった)とき、複数の0

も参照してくださいHow to deal with floating point number precision in JavaScript?

var sum = 0; 
 
var values = [14, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4]; 
 
for(var i=0; i<values.length; i++){ 
 
    var v = values[i]; 
 
    sum += (v * 10); 
 
} 
 
sum = sum/10; 
 
console.log(sum);

0

console.log(1.3999999999999977 + -1.4);

です上記のexpresで操作する精度の低下のために最後に

これは2.2 * 10 ^( - 15)に相当します。これは、途中で得た精度の損失です。

関連する問題