【筆記】計算機的運算方法(三)
四、浮點四則運算
機器中的任何一個浮點數可以寫成
的形式。其中為浮點數的尾數,一般為絕對值小於1的規格化數(補碼錶示時允許為-1),機器中可用原碼或補碼錶示;為浮點數的階碼,一般為整數,機器中大多用補碼或移碼錶示;r為浮點數的基數,常用2、4、8或16表示。1.浮點加減運算
浮點數加減運算必須按以下幾步進行:
- 對階,使兩數的小數點位置對齊。
- 尾數求和,將對階後的兩尾數按定點加減運算規則求和(差)。
- 規格化,為增加有效數字的位數,提高運算精度,必須將求和(差)後的尾數規格化。
- 舍入,為提高精度,要考慮尾數右移時丟失的數值位。
- 溢位判斷,即判斷結果是否溢位。
對階
對階的目的是使兩運算元的小數點位置對齊,即使兩數的階碼相等。首先要求出階差,再按小階向大階看齊的原則,使階小的尾數向右移位,每右移一位,階碼加1,指導兩數的階碼相等為止。右移的次數正好等於階差。尾數右移時可能會發生數碼丟失,影響精度。
尾數求和
將對階後的兩個尾數按定點加(減)運算規則進行運算。
規格化
當基值r=2時,尾數S的規格化形式為 (4-1)
如果採用雙符號位的補碼,則
當時,其補碼規格化形式為 (4-2)
當時,其補碼規格化形式為 (4-3)
當尾數的最高數值位與符號位不同時,即為規格化形式。但對S<0時有兩種情況需要特殊處理:
- ,則。此時對於真值而言,它滿足(4-1)式,對於補碼而言,它不滿足式(4-3)。為了便於硬體判斷,特規定不是規格化的數(對於補碼而言)。
- ,則,因小數補碼允許表示-1,故-1視為規格化的數。
規格化又分為左規和右規。
(1)左規
當尾數出現或時,需要左規。左規時尾數左移一位,階碼減1,直到符合式子(4-2)或(4-3)為止。
(2)右規
當尾數出現或時,表示尾數溢位,這在加減運算中是不允許的,但在浮點運算中這不算溢位,可通過右規處理。右規時尾數右移一位,階碼加1。
舍入
在對階和右規的過程中,可能會將尾數的低位丟失,引起誤差,影響精度。為此可用舍入法來提高尾數的精度。常用的舍入方法有以下兩種:
(1)“0舍1入”法
在尾數右移時,被移去的最高數值位為0,則捨去;被移去的最高數值位為1,則在尾數的末位加1。這樣做可能使尾數又溢位,此時需再做一次右規。
(2)“恆置1”法
尾數右移時,不論丟掉的最高數值位是“1”或“0”,都使右移後的尾數末位恆置“1”。
溢位判斷
與定點加減法一樣,浮點加減運算最後一步也需判斷溢位。當尾數之和出現或時,並不表示溢位,只有將此數右規後,再根據階碼來判斷浮點運算結果是否溢位。
若機器數為補碼,尾數為規格化形式,並假設階符取2位,階碼的數值部分取7位,數符取2位,尾數的數值部分取n位,則它們能表示的補碼在數軸上的表示範圍如圖所示。
它們所對應的真值如下:
A最小負數
B最大正數
a最大負數
b最小正數
a、b之間的陰影部分對應的階碼小於-128,這種情況稱為浮點數的下溢。下溢時,浮點數值趨於零,故機器不做溢位處理,僅把它當作機器零。
A、B兩側的陰影部分對應的階碼大於+127,這種情況稱為浮點數的上溢。此時,浮點數真正溢位,機器需停止運算,作溢位中斷處理。一般說浮點溢位,均是指上溢。
浮點機的溢位與否可由階碼的符號決定,即
階碼為上溢。
階碼為下溢,按機器零處理。
2.浮點乘除法運算
階碼運算
若階碼用補碼運算,乘積的階碼為