1. 程式人生 > >【筆記】計算機的運算方法(三)

【筆記】計算機的運算方法(三)

四、浮點四則運算

  機器中的任何一個浮點數可以寫成

x=Sxrjx的形式。其中Sx為浮點數的尾數,一般為絕對值小於1的規格化數(補碼錶示時允許為-1),機器中可用原碼或補碼錶示;jx為浮點數的階碼,一般為整數,機器中大多用補碼或移碼錶示;r為浮點數的基數,常用2、4、8或16表示。

1.浮點加減運算

  浮點數加減運算必須按以下幾步進行:

  1. 對階,使兩數的小數點位置對齊。
  2. 尾數求和,將對階後的兩尾數按定點加減運算規則求和(差)。
  3. 規格化,為增加有效數字的位數,提高運算精度,必須將求和(差)後的尾數規格化。
  4. 舍入,為提高精度,要考慮尾數右移時丟失的數值位。
  5. 溢位判斷,即判斷結果是否溢位。

對階

  對階的目的是使兩運算元的小數點位置對齊,即使兩數的階碼相等。首先要求出階差,再按小階向大階看齊的原則,使階小的尾數向右移位,每右移一位,階碼加1,指導兩數的階碼相等為止。右移的次數正好等於階差。尾數右移時可能會發生數碼丟失,影響精度。

尾數求和

  將對階後的兩個尾數按定點加(減)運算規則進行運算。

規格化

  當基值r=2時,尾數S的規格化形式為12|S|<1  (4-1)
  如果採用雙符號位的補碼,則

S>0時,其補碼規格化形式為[

S]=00.1×××  (4-2)
S<0時,其補碼規格化形式為[S]=11.0×××  (4-3)

  當尾數的最高數值位與符號位不同時,即為規格化形式。但對S<0時有兩種情況需要特殊處理:

  1. S=12,則[S]=11.1000。此時對於真值12而言,它滿足(4-1)式,對於補碼而言,它不滿足式(4-3)。為了便於硬體判斷,特規定12不是規格化的數(對於補碼而言)。
  2. S=1,則[S]=11.000,因小數補碼允許表示-1,故-1視為規格化的數。

  規格化又分為左規右規

(1)左規

  當尾數出現00.0×××11.1×××時,需要左規。左規時尾數左移一位,階碼減1,直到符合式子(4-2)或(4-3)為止。

(2)右規

  當尾數出現01.×××10.×××時,表示尾數溢位,這在加減運算中是不允許的,但在浮點運算中這不算溢位,可通過右規處理。右規時尾數右移一位,階碼加1

舍入

  在對階和右規的過程中,可能會將尾數的低位丟失,引起誤差,影響精度。為此可用舍入法來提高尾數的精度。常用的舍入方法有以下兩種:

  (1)“0舍1入”法
  在尾數右移時,被移去的最高數值位為0,則捨去;被移去的最高數值位為1,則在尾數的末位加1。這樣做可能使尾數又溢位,此時需再做一次右規。

  (2)“恆置1”法
  尾數右移時,不論丟掉的最高數值位是“1”或“0”,都使右移後的尾數末位恆置“1”。

溢位判斷

  與定點加減法一樣,浮點加減運算最後一步也需判斷溢位。當尾數之和出現01.×××10.×××時,並不表示溢位,只有將此數右規後,再根據階碼來判斷浮點運算結果是否溢位。

  若機器數為補碼,尾數為規格化形式,並假設階符取2位,階碼的數值部分取7位,數符取2位,尾數的數值部分取n位,則它們能表示的補碼在數軸上的表示範圍如圖所示。


這裡寫圖片描述

  它們所對應的真值如下:

  A最小負數  2+127×(1)
  B最大正數  2+127×(12n)
  a最大負數  2128×(212n)
  b最小正數  2128×21

  a、b之間的陰影部分對應的階碼小於-128,這種情況稱為浮點數的下溢。下溢時,浮點數值趨於零,故機器不做溢位處理,僅把它當作機器零。
  A、B兩側的陰影部分對應的階碼大於+127,這種情況稱為浮點數的上溢。此時,浮點數真正溢位,機器需停止運算,作溢位中斷處理。一般說浮點溢位,均是指上溢。

  浮點機的溢位與否可由階碼的符號決定,即
  階碼[j]=01×××為上溢
  階碼[j]=10×××為下溢,按機器零處理

2.浮點乘除法運算


這裡寫圖片描述

階碼運算

  若階碼用補碼運算,乘積的階碼為