购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.3 规约形式与非规约形式

为了在浮点计算的过程中保持最高的精度,大多数计算都采用觃约形式(Normalized)的浮点值。尾数高位为1的浮点值即为规约形式的浮点值。如果参与浮点计算的全部是规约形式的浮点值,则浮点计算的准确性会更高。因为尾数为0的高位有多少,计算中能够使用的有效数字(精度位)就少多少。

几乎所有没有规约化的值都可以通过将尾数左移并递减阶码,直到尾数高位为1来进行规约。 注意,阶码是二进制的指数。阶码每递增一次,相当于浮点值乘以2。相反,阶码每递减一次,则相当于浮点值除以2。同样,尾数左移一位相当于浮点数乘以2,右移一位相当于浮点数除以2。因此,尾数左移一位的同时递减阶码不会改变浮点值(这是某些数字在浮点格式中有多种表示形式的原因,前面已经遇到过这种情况)。

下面是一个非规约形式的数值:

img

将尾数左移一位并递减阶码进行规约:

img

有两种重要的情况,是无法规约浮点数的。首先0是无法规约的,因为0的浮点表示的阶码和尾数的所有位都为0。但这不是问题,因为0可以用一位0精确地表示,不需要额外的精度位。

如果尾数中有一些高位为0且带偏移 的阶码也为0,那么浮点数也是无法规约的(无法递减阶码来规约尾数)。IEEE标准并没有禁用这些尾数高位为0且带偏移的阶码也为0(阶码可以表示的最小负数次幂)的小数,并允许在这种情况下使用特殊的非觃约形式(Denormalized)的数值。 尽管采用非规约形式数值使IEEE浮点计算得到的结果好过发生下溢,但非规约形式牺牲了有效数字的位数(精度位)。 8wIyfMSB3rk1v0UprDJ+ik78ZEuBqhjmSNOm/Qx6wENDJEYCROQYrzQOvwyYcx+y

点击中间区域
呼出菜单
上一章
目录
下一章
×