浮点加法、减法运算
- 浮点数加减法的步骤
- 结合题目分析步骤
浮点数加减法的步骤
① 0 操作数检查
② 比较阶码大小,完成对阶
③ 尾数进行加减法运算
④ 结果规格化
⑤ 舍入处理
⑥ 判断结果是否溢出
结合题目分析步骤
例:设 x = 2010 × 0.11011011,y = 2100 × (- 0.10101100),求x + y
🌱① 0 操作数检查:浮点加减运算过程比定点运算过程复杂,如果判断得知两个操作数中有一个为0,即可得知运算结果,就没必要进行后续一系列操作,节省时间。
此题判断得知操作数都非零,进入下一步。
② 比较阶码大小,完成对阶:为了便于只管理解,假设两数均用补码表示,阶码和尾数均用双符号位:
E | M | |
---|---|---|
[x]浮 | [Ex]补 = 00 010 | [Mx]补=00.11011011 |
[y]浮 | [Ey]补 = 00 100 | [My]补=11.01010100 |
(加粗的是符号位)
两浮点数进行加减,首先看两数的阶码是否相同,若不同,表示小数点的位置没有对齐,此时必须使两数的阶码变成相同的,这个过程叫对阶。 对阶操作规定使尾数右移,尾数右移后阶码做相应的增加,因此对阶时,总是 小阶向大阶看齐
[△E]补 = [Ex]补 - [Ey]补 = [Ex]补 + [ - Ey]补 = 11 110 = -2
所以,对阶应该使 Mx 右移 2 位,同时Ex 加 2
[Ex]补 = 00100
[Mx]补= 00.00110110(11) → 右移 2 位后移出的最低两位
③ 尾数进行加减法运算:
对阶结束后,即可对尾数进行求和。(不论加法还是减法,都按加法操作(减法利用补码减法转换成补码的加法来做))方法与定点数的加减法的运算完全一样。
④ 结果规格化 → 化为1.M的形式
这题算到这,双符号位为11,表示负数,直接尾数规格化即可:尾数左移一位,阶码 -1。
但是双符号位表示尾数时,如果两符号位为 “10” 或 “01” (溢出),应将结果尾数右移一位,阶码+1
⑤ 舍入处理:对阶时尾数右移,低位的1可能被丢掉,从而造成一定的误差,要进行舍入处理。
简单的舍入有两种方法:
1)“0舍1入”法。如果右移时被丢掉的数位的最高位为0则舍去,为1则将尾数的末尾做 +1 运算
2)“恒置1”法。只要数位被移掉,就把尾数的末位恒置1
⑥ 判断结果是否溢出:阶码为00 100,符号位为00,不溢出。最终结果为: [x+y]浮 的阶码:00 100,尾数:11.00010110
[x+y]浮 = 2100 × ( - 0.11101010)
、