【学习计算机组成原理】浮点数的乘除运算

现实中的科学计数乘除

计 算 1.234 × 1 0 2 + 5.678 × 1 0 1 = ? 计算1.234\times10^{2}+5.678\times10^{1}=? 1.234×102+5.678×101=?

  • 1.234 × 5.678 = 7.006652 1.234\times5.678=7.006652 1.234×5.678=7.006652
  • 2 + 1 = 3 2+1=3 2+1=3
  • 7.006652 × 1 0 3 = 7.01 × 1 0 3 7.006652\times10^{3}=7.01\times10^{3} 7.006652×103=7.01×103

我们总结下来就是尾数相乘除,指数相加减。

机器中的过程

求阶

由于阶码是用移码表示的,所以求阶的过程就是求移码的和或差。
移码运算参考
使用以下公式进行阶码的加减,这里的偏置常数是(2n-1-1)

  • [ A + B ] 移 = [ A ] 移 + [ B ] 移 − ( 2 n − 1 − 1 ) [A+B]_{移}=[A]_{移}+[B]_{移}-(2^{n-1}-1) [A+B]=[A]+[B](2n11)
  • [ A − B ] 移 = [ A ] 移 − [ B ] 移 + ( 2 n − 1 − 1 ) [A-B]_{移}=[A]_{移}-[B]_{移}+(2^{n-1}-1) [AB]=[A][B]+(2n11)

示例1:(-1)+(-2)

将阶码用移码表示:(加偏置常数127)
( − 1 ) 10 + ( 127 ) 10 = ( 126 ) 移 = ( 01111110 ) 2 (-1)_{10}+(127)_{10}=(126)_{移}=(0111 1110)_{2} (1)10+(127)10=(126)=(01111110)2

( − 2 ) 10 + ( 127 ) 10 = ( 125 ) 移 = ( 01111101 ) 2 (-2)_{10}+(127)_{10}=(125)_{移}=(0111 1101)_{2} (2)10+(127)10=(125)=(01111101)2

( 127 ) 10 = ( 01111111 ) 补 (127)_{10}=(0111 1111)_{补} (127)10=(01111111)

( − 127 ) 10 = ( 10000001 ) 补 (-127)_{10}=(1000 0001)_{补} (127)10=(10000001)

求阶:(阶码相加,减127)
01111110 + 01111101 + 10000001 = 01111100 0111 1110+0111 1101+1000 0001=0111 1100 01111110+01111101+10000001=01111100
结果:
[ 01111100 ] 移 = 124 [0111 1100]_{移}=124 [01111100]=124
124 − 127 = − 3 124-127=-3 124127=3(减去偏置常数)

示例2:(-1)-(-2)

因为是减-2,所以求-2的变补码:
( 01111101 ) 变 补 = 10000011 (0111 1101)_{变补}=1000 0011 (01111101)=10000011

求阶:(阶码相减,加127)
01111110 + 10000011 + 01111111 = 10000000 0111 1110+1000 0011+0111 1111=1000 0000 01111110+10000011+01111111=10000000
结果:
[ 10000000 ] 移 = 128 [10000000]_{移}=128 [10000000]=128
128 − 127 = 1 128-127=1 128127=1(减去偏置常数)

尾数乘除

由于尾数是用原码表示的,所以需要知道原码的乘除运算:
原码乘参考
原码除参考

结果规格化(同浮点数加减)

  1. 当尾数高位为0需左归:每左移一次,阶码减一,直到MSB(最高有效位)为1。(小数点右移,指数变小)
  2. 当尾数最高位有进位,需右归:每右移一次,阶码加一,直到MSB为1。
  3. 每次阶码变化,都需要判断阶码是否上溢或下溢。阶码上溢时异常处理,下溢时结果为0。

上下溢即尾数和阶码的特殊情况

阶码溢出判断

上溢表示阶码值过大,下溢表示阶码值过小。

  • 左规时(尾数左移,阶码减1)
    先判断阶码是否全0,若是,则阶码下溢。否则,阶码减1后判断是否全为0,若是则阶码下溢。
  • 右规时(尾数右移,阶码加1)
    先判断阶码是否全1,若是,则阶码上溢。否则,阶码加1后判断是否全为1,若是则阶码上溢。

4种特殊情况的溢出
设Ex,Ey是两位阶码,Eb是Ex与Ey运算的结果:

  • Eb全为1则上溢,Eb全为0则下溢。
  • Eb=Ex+Ey
    • 若Ex,Ey最高位都是1,且Eb的最高位是0,则阶码上溢。(正数加正数是负数
    • 若Ex,Ey最高位都是0,且Eb的最高位是1,则阶码下溢。(负数加负数是正数
  • Eb=Ex-Ey
    • 若Ex最高位是1,Ey最高位是0,且Eb的最高位是0,则阶码上溢。(正数减负数是负数
    • 若Ex最高位是0,Ey最高位是1,且Eb的最高位是1,则阶码下溢。(负数减正数是正数

舍入(同浮点数加减)

浮点数加减的舍入
尾数代表的实际值是0,则将阶码置0。(因为浮点数表示0的格式原因)

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序鸡

如果帮到您,点个赞鼓励一下吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值