Hallo,
Es ist
2^64 = 18446744073709551616
2^64 - 1 = 18446744073709551615In JS aber
2^64 = 18446744073709552000
2^64 - 1 = 18446744073709552000Anschaulich: Jenseits von 2^53 = 9007199254740992 gibt es keine exakte Integer-Arithmetik mehr, nur noch Rundungsfehler-behaftete Float-Arithmetik.
das ist auch kein Wunder, weil im IEEE-Format "Double Precision Floating Point" (Datentyp double in C) von den insgesamt 64bit gerade 52 für die Mantisse verwendet werden. Von den übrigen 12 ist eines das Vorzeichen, und die restlichen 11 der Exponent (einschließlich seines Vorzeichens).
Würde man nur das Single-Precision-Format verwenden (float oder single in C), dann hätte man denselben Effekt schon ab 2^24 (ungefähr 16M). Dieses Format benutzt 32bit, davon 23 für die Mantisse, 1 fürs Vorzeichen und 8 für den Exponenten.
Ciao,
Martin
Du kannst dem Leben nicht mehr Tage geben.
Aber dem Tag mehr Leben.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(