2017-05-24 6 views
-1

コードを使用して、多数の間違った結果を取得します。NodeJS:算術級数は、反復

var sum_with_formula = function (n) { 
    return n/2*(n+1); 
} 

var sum_with_loop = function (n) { 
    var sum = 0; 
    for (var i=1; i<=n; i++) { 
    sum = sum + i; 
    } 
    return sum; 
} 

var n = 1000000000; 
const assert = require('assert'); 
assert.equal(sum_with_formula(n), sum_with_loop(n)); 

結果:

assert.js:85 
    throw new assert.AssertionError({ 
^
AssertionError: 500000000500000000 == 500000000067109000 

なぜ式によって反復して計算し、計算の違いはありますか?

しかし、n = 100000000の場合、結果は正しいです。 N = 200000000は、結果が間違っている場合

:私はNodeJSのv6.9.2を使用しています

AssertionError: 20000000100000000 == 20000000067108864 

答えて

1

9007199254740991という最大の「安全な」整数値(Number.MAX_SAFE_INTEGER)を超えました。その値の後の整数値は、JavaScriptの数字のためにdouble-precision floating pointの使用により精度が失われます。

arbitrary precision integersのサポートは、この執筆時点ではまだtc39の提案です。