2.5.2 浮点数的加减法运算
运算步骤:
①对阶操作
②尾数的加减操作
③规格化操作
④舍入操作
⑤判断阶码溢出
对阶就是“小数点对齐”,需要注意的是指数要相同,我们将采用阶码(你也可以称作为指数)大的值来对阶,比如:
x=+0.1101 × 2^4
y=+0.1001 × 2^3
对阶后:
x=+0.1101 × 2^4
y=+0.01001 × 2^4
这里4大,所以y按照4来移动尾数。
小数点对齐后,接下来就相加减,这里就用x+y
00.1101
+00.01001
————————————
01.00011
结果为01.00011 x 2^4,很明显这个结果已经产生上溢。
接下来要做规格化操作,即补码表示时,形式必须是1.0**或0.1**。这里跟据情况:
①两个符号位不相同,右规;比如这个例子的符号位01,数据溢出到符号位,尾数需要右移来规范,就变成了00.10011 x 2^5
②两个符号位相同,但是最高数值位与符号位相同,左规;假如00.010011 x 2^6,这明显不符合1.0**或0.1**的形式,所以尾数左移是其符合这个形式:00.10011 x 2^5。
尾数在对阶和右规的过程中,最低几位的数据移出若丢弃,会造成误差,用辅助电路存储。需要在运算结束时舍入。
舍入的方法有多种,一般采用的方法为0舍1入法(跟四舍五入差不多),就是若舍掉的最高位为0时,直接舍掉,若最高位为1是,需要在剩下的尾数的最低位+1,负数时当丢失的最高位为1,其它位不全为0(或者说只要有1),则尾数+1修正。来看例子(假如符号位和数据位共6位):
例1:00.1001001,保留4位数据,这里尾部的001是多余的,我们直接舍去即可,结果为00.1001;
例2:00.10011,这里舍掉的是1,需要给舍掉后的00.1001加1,结果为00.1010;
例3:00.111111,这种情况,要是加1发现结果会溢出,那么继续进行右规操作。
最后一步,判阶码溢出:在右规和舍入的过程中都有可能造成阶码的溢出。 若最后没有溢出,则运算结束;否则需要做进一步处理。
下溢:将运算结果置为机器零;
上溢:超出阶码表示的最大正数,直接置溢出标志。
综合例子: