计算机组织结构(四) 浮点数四则运算
浮点数的加减运算
$X=X_S \times 2^{X_E},Y=Y_S \times 2^{Y_E}$
- 步骤
- 检查是否为零
- 阶码对齐,尾数移位
- 对尾数加或减
- 标准化结果
- 溢出判断
对阶
求阶差
$\Delta E=\begin{cases}
=0,已经对齐\
\ne0,\begin{cases}大的向小的对齐:减小较r大的阶码,同时扩大其尾数\小的向大的对齐:增大较小的阶码,同时减小其尾数 \end{cases} \
\end{cases}$
在计算机中,尾数左移可能会使最高位数据丢j失,故采用小阶向大阶对齐浮点数加减的过程
一些溢出情况
1. Exponent overflow
- 一个正的指数超出了指数的最大值(即127)
- 指定为$-\infty 或 +\infty$
2. Exponent underflow
- 一个负的指数小于了指数的最小值(即-126)
- 指定为0.
3. Significand overflow
- 同号的两个数字相加时,在最重要的位上产生了进位.
- 在realignment时修正
4. Significand underflow
- 在对齐尾数的时候, 数据可能从尾数的最右端流失
- 需要某种形式的四舍五入
原码加减法(用于尾数的加减)
如果两个操作数符号相同,做加法,否则做减法.
- 加法:
- 若最高位产生了进位,溢出
- 符号同加数
- 减法:加第二个数的补数
- 若最高位产生进位,结果正确(符号等同于被减数)
- 若没有进位,应该取结果的补数,最终结果与被减数相反.
注意:此处可以是认定为没有符号位的补码在做计算,所以最终结果需要进行修正.(因为正数补码是它自身,负数补码是其反码加一)
更通俗的说法:最终算A+B的时候(无论是一开始就是A+B还是减法转化而来).如A,B同号,尾数是正常相加;若A,B异号,尾数为$AS+[B_S]补$
- 加法:
浮点数加减法举例
减法
0.5-(-0.4375)=0.5+0.4375=0.9375
0.5 0 01111110 00000000000000000000000
-0.4375 1 01111101 11000000000000000000000
0.4375 0 01111101 11000000000000000000000
01111110-01111101=01111110+10000011=00000001
则前者阶码比后者大,后者向前者对齐(后者阶码加1,尾数右移一位,此处尾数包含隐藏位,即橙色位).减法经处理后,两个操作数同号,尾数做正常加法1 0000...00 + 0 1110...00 —————————— 1 1110...00 加法计算没有进位,则结果正确,为
加法
0.5+(-0.4375)=0.0625
0.5 0 01111110 00000000000000000000000
-0.4375 1 01111101 1100000000000000000000001111110-01111101=01111110+10000011=00000001
则前者阶码比后者大,后者向前者对齐(后者阶码加1,尾数右移一位,此处尾数包含隐藏位,即橙色位).两个操作数异号,尾数加法做加后者补数.1 0000...00 + 1 0010...00 —————————— 1 0 0010...00 符号相异产生进位,结果正确,与第一个操作数符号相同.经规格化后:
1 01111011 00000000000000000000000
浮点数乘法
- 步骤
- 如果任何一个操作数为0,返回0.
- 指数相加时需要减去偏差值,因为阶码用移码表示.
- 尾数相乘.
- 结果规格化并舍入.(可能造成指数溢出).
浮点数除法
- 步骤
- 除数为0,报错或设为无穷.
- 被除数为0,设为0.
- 被除数的阶码和除数的阶码做差,并加回偏差值.
- 尾数相除.
- 结果标准化并舍入.
注意:和无符号整数除法不同:浮点数除法给被除数后面填零存入余数和商寄存器,而整数是高位填零.
保护位
为了提高精度,在计算时每个数字都存在保护位,暂时储存着计算后(比如右移)后的超出低位的数据.