javascriptieee-754

Why is Number.MAX_VALUE 1.7976931348623157e+308 instead of 9007199254740992e+1024?


JavaScript uses IEEE 754 for storing numbers, for both integer and floating point values, where 53 bits are used for representing the mantissa and 11 bits are used for representing the exponent.

The maximum value representable with a signed 53 bit integer is ±9007199254740992, and the maximum value representable with a signed 11 bit integer is ±1024.

However, Number.MAX_VALUE in JavaScript is 1.7976931348623157e+308. Why isn’t it 9007199254740992e+1024, which is possible to represent with 64 bits and is the larger value?


Solution

  • The AeB syntax mirrors scientific notation and hence means A * 10^B, not A * 2^B. The maximum binary64 value is 9007199254740992 * 2^1024 (or something like that), not 9007199254740992 * 10^1024. Your proposed 9007199254740992e+1024 means the latter and is much larger (10^1024 ~= 2^3402), so it doesn't actually fit in a 64 bit binary float (try it!).