J'essaie d'obtenir la somme des 1 + 2 + ... + 1000000000
, mais je suis arriver de drôles de résultats en PHP et 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
La bonne réponse peut être calculée à l'aide de
1 + 2 + ... + n = n(n+1)/2
Bonne réponse = 500000000500000000, j'ai donc décidé d'essayer une autre langue.
ALLER
var sum , i int64
for i = 0 ; i <= 1000000000; i++ {
sum += i
}
fmt.Println(sum) // 500000000500000000
Mais il fonctionne très bien! Alors quel est le problème avec mon PHP et Node.js code?
Peut-être est ce un problème de langages interprétés, et c'est pourquoi il travaille dans un langage compilé comme Aller? Si oui, aurait-il d'autres langages tels que Python et Perl ont le même problème?