Warum ist die Zahl.MAX_SAFE_INTEGER 9,007,199,254,740,991 und nicht 9,007,199,254,740,992?

ECMAScript 6 ist Number.MAX_SAFE_INTEGER angeblich repräsentiert der numerische Höchstwert, den JavaScript speichern kann, bevor Sie Probleme mit floating-point-Präzision. Aber es ist eine Anforderung, dass die Zahl 1 addiert zu diesem Wert muss auch darstellbar als Number.

Number.MAX_SAFE_INTEGER

HINWEIS: Der Wert von Number.MAX_SAFE_INTEGER ist die größte ganze Zahl n so dass n und n + 1 sind beide genau darstellbar als Number Wert.

Den Wert Number.MAX_SAFE_INTEGER ist 9007199254740991 (2^53−1).

ECMAScript Language Specification

Den JavaScript-Konsolen von Chrome, Firefox, Opera und IE11 können alle sicher zu führen Sie die Berechnungen mit der Anzahl 9,007,199,254,740,992. 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, dass n + 1 muss auch darstellbar als Number? Warum nicht dieses, dass der Wert unsicher?

Schreibe einen Kommentar