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

时间:2014-03-14 10:48:29

标签: javascript

IEEE 754之后的Java脚本用于存储数字(整数和浮点值)。

其中53位用于表示mantisa部分,11位用于表示指数部分。

53位的最大值表示为+/- 9007199254740992。 最大值表示11位是+ -1024。

java脚本中的Number.MAX_VALUE是1.7976931348623157e + 308为什么不是9007199254740992e + 1024 ???

第二个可以用64位表示,它是大值。

3 个答案:

答案 0 :(得分:5)

AeB语法镜像scientific notation,因此意味着A * 10^B,而不是A * 2^B。最大binary64值是9007199254740992 * 2 ^ 1024(或类似的东西),而不是9007199254740992 * 10 ^ 1024。您提议的9007199254740992e+1024表示后者并且更大(10 ^ 1024~ = 2 ^ 3402),因此它实际上不适合64位二进制浮点数(试试吧!)

答案 1 :(得分:1)

科学记数法e + 308表示10 ^ 308,约为0.5562 * 2 ^ 1024。

答案 2 :(得分:1)

实际答案是(2 ^ 54-1)/ 2 ^ 53 *(2 ^ 1023)。在Wikipedia上查找! (双精度浮点格式