为什么是Number.MAX_VALUE 1.7976931348623157e + 308而不是9007199254740992e + 1024?

问题描述 投票:4回答:2

JavaScript使用IEEE 754来存储整数和浮点值的数字,其中53位用于表示尾数,而11位用于表示指数。

[带符号的53位整数可表示的最大值为±9007199254740992,带符号的11位整数可表示的最大值为±1024。

但是,JavaScript中的Number.MAX_VALUE1.7976931348623157e+308。为什么9007199254740992e+1024不能用64位表示,并且是较大的值?

javascript ieee-754
2个回答
8
投票

AeB语法反映了scientific notation,因此表示A * 10^B,而不是A * 2^B。 binary64的最大值是9007199254740992 * 2 ^ 1024(或类似的值),而不是9007199254740992 * 10 ^ 1024。您建议的9007199254740992e+1024表示后者,并且要大得多(10 ^ 1024〜= 2 ^ 3402),因此它实际上不适合64位二进制浮点数(尝试一下!)。


2
投票
科学符号e + 308表示10 ^ 308,大约是0.5562 * 2 ^ 1024。
© www.soinside.com 2019 - 2024. All rights reserved.