Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is Number.MAX_SAFE_INTEGER 9,007,199,254,740,991 and not 9,007,199,254,740,992?

ECMAScript 6's Number.MAX_SAFE_INTEGER supposedly represents the maximum numerical value JavaScript can store before issues arise with floating point precision. However it's a requirement that the number 1 added to this value must also be representable as a Number.

Number.MAX_SAFE_INTEGER

NOTE The value of Number.MAX_SAFE_INTEGER is the largest integer n such that n and n + 1 are both exactly representable as a Number value.

The value of Number.MAX_SAFE_INTEGER is 9007199254740991 (2^53−1).

– ECMAScript Language Specification

The JavaScript consoles of Chrome, Firefox, Opera and IE11 can all safely perform calculations with the number 9,007,199,254,740,992. Some 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 

Why is it a requirement that n + 1 must also be representable as a Number? Why does failing this make the value unsafe?

like image 334
James Donnelly Avatar asked Oct 15 '14 10:10

James Donnelly


People also ask

Can I use number Max_safe_integer?

Because MAX_SAFE_INTEGER is a static property of Number , you always use it as Number. MAX_SAFE_INTEGER , rather than as a property of a Number object you created.

What is the max number?

The number 2,147,483,647 (or hexadecimal 7FFFFFFF16) is the maximum positive value for a 32-bit signed binary integer in computing.

What is the biggest number in JS?

JavaScript Number MAX_VALUE MAX_VALUE returns the largest number possible in JavaScript. Number. MAX_VALUE has the value of 1.7976931348623157e+308.

What is number MIN_SAFE_INTEGER?

The Number. MIN_SAFE_INTEGER constant represents the minimum safe integer in JavaScript, or -(253 - 1). To represent integers smaller than this, consider using BigInt .


2 Answers

I would say its because while Math.pow(2, 53) is the largest directly representable integer, its unsafe in that its also the first value who's representation is also an approximation of another value:

9007199254740992 == 9007199254740993 // true

In contrast to Math.pow(2, 53) - 1:

9007199254740991 == 9007199254740993 // false

like image 135
Alex K. Avatar answered Oct 06 '22 19:10

Alex K.


the only number which is in close proximity of another when compared with its next number shows true

9007199254740992 == 9007199254740993 true 9007199254740993 == 9007199254740994 false 9007199254740991 == 9007199254740992 false 9007199254740997 == 9007199254740998 false 
like image 25
Merita Wilson H Avatar answered Oct 06 '22 20:10

Merita Wilson H