對於兩個浮點數x和y滿足:
完成x與y的加減法有四個步驟:
0運算元檢查。即檢查是否有乙個運算元為0,是的話直接得到結果,一般在計算機中不進行這一步。比較階碼大小並完成對階。要讓兩個浮點數的尾數能夠直接相加減,它們的階碼也就是mx和
my
m_和m_
mx和my
必須相同,因此必須完成對階,一般是讓小階向大階看齊。
尾數進行加減運算。方法與定點加減運算完全一致,沒有什麼好說的。
結果規格化。這一步是重點,也是難點。
要想知道怎麼規格化,肯定得知道什麼才是規範的表達方式。浮點數都是近似表示的,精度由尾數決定,數的表示範圍大小由r、e決定。為了提高精度需要使尾數的有效位數盡可能佔滿可用的位數。這種措施稱為浮點數的規格化。規格化要求尾數:
1/r<=|m|<1。
計算機中r = 2,因此實際上我們計算出來得到的尾數必須屬於[0.5, 1)。
在浮點數加減運算時,我們採用雙符號位,因此,當計算結果為01.***x或者10.***x時,表示結果溢位,已經大於1了,因此需要規格化。
下面舉個具體的例子:
m =2
2x
0.11011011,n
=24x
(−
0.10101100
)m = 2^x0.11011011,n = 2^x(-0.10101100)
m=22x0
.110
1101
1,n=
24x(
−0.1
0101
100)
,求m+n。
逐步分析:
浮點數運算的的規格化
在尾數用補碼表示時,規格化浮點數應滿足尾數最高數字與符號位不同,如相同就是不滿足規格化。尾數用雙符號位補碼表示,經過加 減運算之後,可能出現以下六種情況,即 00.1 x x x 11.0 x x x 00.0 x x x 11.1 x x x 01.x x x x 10.x x x x 第 種情況...
浮點數的表示 基本格式 規格化 表示範圍
浮點數表示法是指以適當的形式將比例因子表示在資料中,讓小數點的位置根據需要而浮動。這樣,在位數有限的情況下,既擴大了數的表示範圍,又保持了數的有效精度。階碼 階碼是整數,階符和 m 位階碼的數值部分共同反映浮點數的表示範圍及小數點的實際位置,常用移碼或補碼表示。ieee754標準中採用移碼的表示形式...
GCC中關於浮點運算的問題
最近讀書 深入理解計算機系統 裡第二章中的 intel ia32 浮點運算 發現其中給出的測試程式有些問題 浮點數暫存器使用的是80位的擴充套件精度格式 float 型別使用的是32位精度格式 double 型別使用的是64位精度格式 書中給出的例子是 includedouble recip int...