Why is Number.MAX_SAFE_INTEGER 9,007,199,254,740,991 and not 9,007,199,254,740,992?
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