Warum ist Number.MAX_SAFE_INTEGER 9.007.199.254.740.991 und nicht 9.007.199.254.740.992?

ECMAScript 6'sNumber.MAX_SAFE_INTEGER stellt angeblich den maximalen numerischen Wert dar, den JavaScript speichern kann, bevor Probleme mit der Gleitkommapräzision auftreten. Voraussetzung ist jedoch, dass die zu diesem Wert hinzugefügte Zahl 1 auch als @ darstellbar isNumber.

Number.MAX_SAFE_INTEGER

HINWEIS Der Wert vonNumber.MAX_SAFE_INTEGER ist die größte Ganzzahln so dassn undn + 1 sind beide genau darstellbar alsNumber Wert

Der Wert vonNumber.MAX_SAFE_INTEGER ist9007199254740991 (2^53−1).

ECMAScript Sprachspezifikation

Die JavaScript-Konsolen von Chrome, Firefox, Opera und IE11 können alle sicher Berechnungen mit der Nummer 9.007.199.254.740.992 durchführen. Einige Tests:

// Valid
Math.pow(2, 53)                         // 9007199254740992
9007199254740991 + 1                    // 9007199254740992
9007199254740992 - 1                    // 9007199254740991
9007199254740992 / 2                    // 4503599627370496
4503599627370496 * 2                    // 9007199254740992
parseInt('20000000000000', 16)          // 9007199254740992
parseInt('80000000000', 32)             // 9007199254740992
9007199254740992 - 9007199254740992     // 0
9007199254740992 == 9007199254740991    // false
9007199254740992 == 9007199254740992    // true

// Erroneous
9007199254740992 + 1                    // 9007199254740992
9007199254740993 + ""                   // "9007199254740992"
9007199254740992 == 9007199254740993    // true

Warum ist es eine Voraussetzung, dassn + 1 muss auch als @ darstellbar seNumber? Warum wird bei einem Fehlschlagen der Wertunsiche?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage