在解释型语言上使用非常大的整数时出现意外结果
2022-08-30 06:27:10
我试图得到的总和,但我在PHP和Node.js得到了有趣的结果。1 + 2 + ... + 1000000000
菲律宾比索
$sum = 0;
for($i = 0; $i <= 1000000000 ; $i++) {
$sum += $i;
}
printf("%s", number_format($sum, 0, "", "")); // 500000000067108992
节点.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)会有同样的问题吗?