📚 文档目录 合集-数的二进制表示-定点运算-BCD 码-浮点数四则运算-内置存储器-Cache-外存-纠错-RAID-内存管理-总线-指令集: 特征- 指令集:寻址方式和指令格式
浮点数的加减运算
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异号,尾数为A_S+[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,尾数右移一位,此处尾数包含隐藏位,即橙色位).减法经处理后,两个操作数同号,尾数做正常加法
加法计算没有进位,则结果正确,为
- 加法 0.5+(-0.4375)=0.0625 0.5 0 01111110 00000000000000000000000 -0.4375 1 01111101 11000000000000000000000 01111110-01111101=01111110+10000011=00000001 则前者阶码比后者大,后者向前者对齐(后者阶码加1,尾数右移一位,此处尾数包含隐藏位,即橙色位).两个操作数异号,尾数加法做加后者补数.
符号相异产生进位,结果正确,与第一个操作数符号相同.经规格化后:
浮点数乘法
- 步骤
- 如果任何一个操作数为0,返回0.
- 指数相加时需要减去偏差值,因为阶码用移码表示.
- 尾数相乘.
- 结果规格化并舍入.(可能造成指数溢出).
浮点数除法
- 步骤
- 除数为0,报错或设为无穷.
- 被除数为0,设为0.
- 被除数的阶码和除数的阶码做差,并加回偏差值.
- 尾数相除.
- 结果标准化并舍入.
注意:和无符号整数除法不同:浮点数除法给被除数后面填零存入余数和商寄存器,而整数是高位填零.
保护位
为了提高精度,在计算时每个数字都存在保护位,暂时储存着计算后(比如右移)后的超出低位的数据.