對于兩個浮點數x和y滿足:

完成x與y的加減法有四個步驟:
- 0運算元檢查,即檢查是否有一個運算元為0,是的話直接得到結果,一般在計算機中不進行這一步,
- 比較階碼大小并完成對階,要讓兩個浮點數的尾數能夠直接相加減,它們的階碼也就是 M x 和 M y M_{x}和M_{y} Mx?和My?必須相同,因此必須完成對階,一般是讓小階向大階看齊,
- 尾數進行加減運算,方法與定點加減運算完全一致,沒有什么好說的,
- 結果規格化,這一步是重點,也是難點,
要想知道怎么規格化,肯定得知道什么才是規范的表達方式,浮點數都是近似表示的,精度由尾數決定,數的表示范圍大小由R、E決定,為了提高精度需要使尾數的有效位數盡可能占滿可用的位數,這種措施稱為浮點數的規格化,規格化要求尾數:
??????????1/R<=|M|<1,
計算機中R = 2,因此實際上我們計算出來得到的尾數必須屬于[0.5, 1),
在浮點數加減運算時,我們采用雙符號位,因此,當計算結果為01.XXXX或者10.XXXX時,表示結果溢位,已經大于1了,因此需要規格化,
下面舉個具體的例子:
m
=
2
2
X
0.11011011
,
n
=
2
4
X
(
?
0.10101100
)
m = 2^{2}X0.11011011,n = 2^{4}X(-0.10101100)
m=22X0.11011011,n=24X(?0.10101100),求m+n,
逐步分析:
- 0運算元檢查,m和n都不為0,
- 對階,小階2向大階4對齊,所以m的階數加2,相應地,m的尾數右移(小數點左移,尾數變小)兩位: m = 2 4 X 0.00110110 ( 11 ) m = 2^{4}X0.00110110(11) m=24X0.00110110(11),而n保持不變,
- 由于要進行補碼運算,所以將m和n的尾數變成補碼表示(雙符號位):
m = 2 4 X 00.00110110 ( 11 ) , n = 2 4 X 11.01010100 m = 2^{4}X00.00110110(11),n = 2^{4}X11.01010100 m=24X00.00110110(11),n=24X11.01010100,其中11.01010100=11.01010011+1(取反再加1),接下來將尾數相加:

可以看到并未溢位,但是并不一定滿足大于0.5, 我們將其轉成原碼很容易發現第一位為0,也就是說是小于0.5的,必須規格化,由此我們總結出要規格化的幾種情形: - 若尾數為00.0XXX或者11.1XXX,雖然并未溢位,但是并不滿足大于0.5,因此也必須要規格化,由于尾數要變大,階碼變小,即尾數左移(小數點右移),稱之為向左規格化,使之最終變成00.1XXXX或者11.0XXXX,
- 若尾數為10.XXXX或者01.XXXX表明運算結果溢位,必須使尾數變小,階碼變大,尾數右移(小數點左移),稱之為向右規格化,
- 針對例子中的情況,需要進行向左規格化,最終變成:
???? m + n = 11.00010101 ( 10 ) X 2 3 m + n = 11.00010101(10)X2^{3} m+n=11.00010101(10)X23 - 將尾數進行舍入處理,最后為10直接加1,變成11.00010110,所以換成原碼的尾數為00.11101010,即最終有:
???? m + n = 0.11101010 X 2 011 m + n = 0.11101010X2^{011} m+n=0.11101010X2011,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239042.html
標籤:其他
上一篇:(一)基于Multisim的超外差接收系統:本地振蕩器的設計
下一篇:漫畫 | 康熙學不了二進制
