Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当 IEEE 745 浮点值实际上具有范围为 [1.0, 2) 的有效数字时,为什么 frexp/ldexp 函数的有效数字范围为 [0.5, 1.0)?
对于任何非 0 或非正规的有效浮点值,尾数的高位始终为 1。IEEE-754 通过不将其编码为二进制值来利用这一点,从而挤出一位额外的精度。就像double有 53 位精度但只编码 52。所以编码值永远不会小于 1,范围是 [1.0 .. 2)
但是一旦需要实际值,例如当您 printf() 它或需要进行计算时,则需要从编码值中恢复该位。通常在处理器的浮点执行单元内部完成。否则就是臭名昭著的英特尔 x87 FPU 设计的 80 位内部格式背后的灵感。所以实际范围是[0.5 .. 1)。frexp 函数适用于实际值。