4

当 IEEE 745 浮点值实际上具有范围为 [1.0, 2) 的有效数字时,为什么 frexp/ldexp 函数的有效数字范围为 [0.5, 1.0)?

4

1 回答 1

-1

对于任何非 0 或非正规的有效浮点值,尾数的高位始终为 1。IEEE-754 通过不将其编码为二进制值来利用这一点,从而挤出一位额外的精度。就像double有 53 位精度但只编码 52。所以编码值永远不会小于 1,范围是 [1.0 .. 2)

但是一旦需要实际值,例如当您 printf() 它或需要进行计算时,则需要从编码值中恢复该位。通常在处理器的浮点执行单元内部完成。否则就是臭名昭著的英特尔 x87 FPU 设计的 80 位内部格式背后的灵感。所以实际范围是[0.5 .. 1)。frexp 函数适用于实际值。

于 2015-08-29T07:24:02.847 回答