の合計を取得しようとしていますが1 + 2 + ... + 1000000000
、PHP とNode.jsで面白い結果が得られています。
PHP
$sum = 0;
for($i = 0; $i <= 1000000000 ; $i++) {
$sum += $i;
}
printf("%s", number_format($sum, 0, "", "")); // 500000000067108992
Node.js
var sum = 0;
for (i = 0; i <= 1000000000; i++) {
sum += i ;
}
console.log(sum); // 500000000067109000
を使って正解を計算できます。
1 + 2 + ... + n = n(n+1)/2
正解 = 500000000500000000 なので、別の言語を試すことにしました。
行く
var sum , i int64
for i = 0 ; i <= 1000000000; i++ {
sum += i
}
fmt.Println(sum) // 500000000500000000
しかし、それはうまくいきます!私の PHP と Node.js コードのどこが悪いのでしょうか?
おそらくこれはインタープリター言語の問題であり、それが Go のようなコンパイル済み言語で機能する理由でしょうか? もしそうなら、Python や Perl などの他のインタープリター言語にも同じ問題がありますか?