Unerwartete Ergebnisse bei der Arbeit mit sehr großen Ganzzahlen für interpretierte Sprachen
Ich versuche die Summe von zu bekommen1 + 2 + ... + 1000000000
, aber ich bekomme lustige Ergebnisse in PHP undNode.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
Die richtige Antwort kann mit berechnet werden
1 + 2 + ... + n = n(n+1)/2
Richtige Antwort =500000000500000000Also habe ich beschlossen, eine andere Sprache zu probieren.
GEHEN
var sum , i int64
for i = 0 ; i <= 1000000000; i++ {
sum += i
}
fmt.Println(sum) // 500000000500000000
Aber es funktioniert gut! Was ist also falsch an meinem PHP- und Node.js-Code?
Vielleicht ist das ein Problem von interpretierten Sprachen, und deshalb funktioniert es in einer kompilierten Sprache wie Go? Wenn ja, hätten andere interpretierte Sprachen wie Python und Perl das gleiche Problem?