【學習計算機組成原理】浮點數的乘除運算

現實中的科學計數乘除

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

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

我們總結下來就是尾數相乘除,指數相加減。

機器中的過程

求階

由於階碼是用移碼錶示的,所以求階的過程就是求移碼的和或差。
移碼運算參考
使用以下公式進行階碼的加減,這裏的偏置常數是(2n-1-1)

  • [A+B]=[A]+[B](2n11)[A+B]_{移}=[A]_{移}+[B]_{移}-(2^{n-1}-1)
  • [AB]=[A][B]+(2n11)[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=011111000111 1110+0111 1101+1000 0001=0111 1100
結果:
[01111100]=124[0111 1100]_{移}=124
124127=3124-127=-3(減去偏置常數)

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

因爲是減-2,所以求-2的變補碼:
(01111101)=10000011(0111 1101)_{變補}=1000 0011

求階:(階碼相減,加127)
01111110+10000011+01111111=100000000111 1110+1000 0011+0111 1111=1000 0000
結果:
[10000000]=128[10000000]_{移}=128
128127=1128-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的格式原因)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章