深入理解浮点数:阶码为什么要加上偏移量等4个问题

深入理解浮点数:阶码为什么要加上偏移量等4个问题

1. 为什么阶码要加上偏移量127或1023呢?

我们知道,浮点数的表示分为三部分:数符、阶码、尾数。

其中阶码并非直接存储科学计数法的指数(如上图的指数6),而是会加上偏移(存储的是133,由6+127计算得来)。对于单精度浮点数,阶码部分占8位,偏移量为127;而对于双精度浮点数,阶码部分占11位,偏移量为1023。

为什么要这样设计呢?

下面以单精度浮点数为例进行说明。

①将阶码转换为无符号整数,简化硬件实现

要理解这点,有几个关键:

二进制数的阶码有正有负,就像十进制的指数一样

单精度阶码有8位,相当于一个byte,理论上能表示的数据范围是-128~127

实际上我们规定阶码的范围是-126~127,有正有负,加上偏移量127后的范围是1 ~ 254,变成了无符号整数,就不用考虑正负号了

总之,加偏移量后,指数可以表示为无符号整数,这简化了硬件的设计和运算逻辑。如果不使用偏移量,负指数需要特别处理,增加了硬件实现的复杂度。通过偏移,所有的指数都可以用统一的方式处理,无论是正数还是负数。

②避免阶码特殊值0和255

为什么不偏移量定位为128呢?

毕竟8位阶码理论上能表示的范围是-128 ~ 127,加上偏移量之后范围是

相关数据