什么位模式代表双精度浮点数的最大值?
What bit pattern represents the max value for double precision floating point?
我想知道最大值是如何用 64 位双精度浮点数表示的。我假设它在指数和尾数中用全 1 表示,如下所示:
0 11111111111 1111111111111111111111111111111111111111111111111111
如果是,那为什么 Number.MAX_VALUE = 1.7976931348623157e+308
显示 308
的指数,而不是从 11111111111
解码的 1024
?位模式是否不同?
指数是 308,因为它是 1.7976931x10^308,也是 1x2^1024.
指数是 308,因为 308 是 1024 / (log 10 / log 2)
。
记住 1024 是二进制指数,而 308 是二进制指数。
308 是十进制指数,而 double 使用 2 的幂。
其次,最大值指数保留给无穷大和 NaN。 Max-1 是正则数的最大指数。因此最大数量写为:
01111111 11101111 11111111 11111111 11111111 11111111 11111111 11111111
即0
符号位,2046
作为指数值(请注意,1023
实际上表示指数为零,因此 2046
表示 1023
的指数),尾数全为(1.11111(52 times)
在二进制中,第一个被隐藏),换句话说 1.11111(52 times)*2^1023
.
转换成十进制是(2-(2^-52))*2^1023
,大约是1.79769313486231*10^308
。
对于 double/float 格式,您可以在 wiki 上找到非常精确的信息。
我想知道最大值是如何用 64 位双精度浮点数表示的。我假设它在指数和尾数中用全 1 表示,如下所示:
0 11111111111 1111111111111111111111111111111111111111111111111111
如果是,那为什么 Number.MAX_VALUE = 1.7976931348623157e+308
显示 308
的指数,而不是从 11111111111
解码的 1024
?位模式是否不同?
指数是 308,因为它是 1.7976931x10^308,也是 1x2^1024.
指数是 308,因为 308 是 1024 / (log 10 / log 2)
。
记住 1024 是二进制指数,而 308 是二进制指数。
308 是十进制指数,而 double 使用 2 的幂。
其次,最大值指数保留给无穷大和 NaN。 Max-1 是正则数的最大指数。因此最大数量写为:
01111111 11101111 11111111 11111111 11111111 11111111 11111111 11111111
即0
符号位,2046
作为指数值(请注意,1023
实际上表示指数为零,因此 2046
表示 1023
的指数),尾数全为(1.11111(52 times)
在二进制中,第一个被隐藏),换句话说 1.11111(52 times)*2^1023
.
转换成十进制是(2-(2^-52))*2^1023
,大约是1.79769313486231*10^308
。
对于 double/float 格式,您可以在 wiki 上找到非常精确的信息。