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?

Antworten auf die Frage(30)

Ihre Antwort auf die Frage