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

现实中的科学计数乘除

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

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

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

机器中的过程

求阶

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

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

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

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

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

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

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

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

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

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

求阶:(阶码相减,加127)
01111110 + 10000011 + 01111111 = 10000000 0111 1110+1000 0011+0111 1111=1000 0000
结果:
[ 10000000 ] = 128 [10000000]_{移}=128
128 127 = 1 128-127=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的格式原因)

猜你喜欢

转载自blog.csdn.net/weixin_44611096/article/details/106081585