我想知道最大值是如何用64位双精度浮点表示的。我假设它用指数和尾数中的所有1来表示,如下所示:
0 11111111111 1111111111111111111111111111111111111111111111111111
如果是,那么为什么Number.MAX_VALUE = 1.7976931348623157e+308
显示308
的指数,而不是1024
解码的11111111111
?位模式是否不同?
答案 0 :(得分:2)
指数是308,因为它的1.7976931x 10 ^ 308,也是1x 2 ^ 1024。
答案 1 :(得分:2)
指数为308,因为308为1024 / (log 10 / log 2)
。
请记住,1024是二进制指数,但308是否定指数。
答案 2 :(得分:2)
308是十进制指数,而double是2的幂。
其次,最大值指数保留给无穷大和NaN。 Max-1是常规数的最大指数。因此,最大数字写为:
01111111 11101111 11111111 11111111 11111111 11111111 11111111 11111111
即。 0
符号位,2046
为指数值(请注意,1023
表示实际为零指数,因此2046
表示指数为1023
),尾数为全1({{ 1}}二进制,第一个隐藏),换句话说1.11111(52 times)
。
转换为十进制,1.11111(52 times)*2^1023
即(2-(2^-52))*2^1023
。
对于双/浮点格式,您可以在wiki找到非常精确的信息。