当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:
1/2 ≤ |M|<1
显然对于正数而言,有M = 00.1φφ…φ;对于负数,其补码形式为11.0φφ…φ(即-0.0*******,左归)。这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ…φ或11.0φφ…φ,就是规格化的数;如果它们相等,即为00.0φφ…φ或11.1φφ…φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化。规则是:尾数左移1位,阶码减1。
在浮点加减运算时,尾数求和的结果也可以得到01.φφ…φ或10.φφ…φ,即两符号位不相等,在这定点加减运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将尾数运算结果右移以实现规格化表示,称为向右规格化,即尾数右移1位,阶码加1。
【例 】 设x=2010×0.11011011,y=2100×(-0.10101100),求x+y。
[解:]
为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的
浮点表示分别为
[x]浮=00 010, 0.11011011
[y]浮=00 100, 1.01010100
<1> 求阶差并对阶
△E=Ex-Ey=[Ex]补+[-Ey]补=00 010+11 100=11 110
即△E为-2,x的阶码小,应使Mx右移两位,Ex加2,
[x]浮=00 100,0.00110110(11)
其中(11)表示Mx右移2位后移出的最低两位数。
<2> 尾数求和
0. 0 0 1 1 0 1 1 0 (11)
+ 1. 0 1 0 1 0 1 0 0
1. 1 0 0 0 1 0 1 0 (11)
<3>规格化处理
尾数运算结果的符号位与最高数值位同值,应执行左规处理,结果为1.00010101(10),阶码为 00 011。
<4>舍入处理
采用0舍1入法处理,则有
1. 0 0 0 1 0 1 0 1
+ 1
────────────────
1. 0 0 0 1 0 1 1 0<5>判溢出
阶码符号位为00,不溢出,故得最终结果为
x+y=2011×(-0.11101010)