浮點數字

[單精密度浮點表示法][倍精密度浮點表示法][浮點加法][浮點乘法]


單精密度浮點表示法

下面是MIPS浮點數字的表示法, S 是浮點數字的正負符號(1表示負號),指數放在8位元指數欄位(包括指數的正負符號),有效數字是23位元的小數,這種表示法稱為 sign and magnitude表示法。

一般來說,浮點數字的格式為:(-1)s×F×2e 。F表示有效數字欄位的值,E表示指數欄位的值。

設計者必須在有效數字欄位的寬度與指數欄位的寬度之間取得妥協,因為字組的長度是固定的,從某一個欄位的減少一位元時,就表示另一個欄位多一個位元:增加有效數字欄位的寬度,所能表示的有效數字的位數便提高,但增加指數欄位的寬度時,所能表示的數字範圍便擴大。

有時數字太大而無法表示時,就需要overflow interrupt,此處的溢位表示指數太大,而無法以指數欄位表示。當然有時候可能所要表示的數字太小無法表示時,電腦會以underflow interrupt來提醒使用者。為了降低溢位與短值的可能性,大部份的語言提供一種具有更寬的指數欄位的表示法,在C中稱為double。

 


倍精密度浮點表示法

倍精密度浮點數字的表示法需要兩個字組,如下圖所示,S是數字的正負位元,指數放在11個位元的指數欄位,有效數字是52位元的小數。

為了使用更多的位元寬度存有效數字,IEEE 754採用隱藏式以1為首正規二進位數字,因此在單精密度表示法中,有效數字的實際寬度是24位元(隱藏的1+23位元的小數)。在倍精密度表示法中,有效數字的寬度是53位元(1+52)。

(-1)s×(1+有效數字)×2e

有效數字表示0與1之間的小數,E表示指數欄位的值。如果將有效數字欄位的位元由左至右地編號S1,S2,S3...,則上面格式所表示的值是

(-1)s×(1+(S1×2-1)+(s2×s-2)+(S3×2-3)+...)×2e

IEEE 754的設計者所想要的浮點表示法是:能夠輕易地做整數運算,這是正負符號位於最高有效位元的原因,可以快速檢查小於、大於、等於0。將指數欄位放在有效數字欄位之前,可以簡化浮點數字的排序,因為只要正負號相同,具有較大指數的數字大於具有較小指數的數字。

當碰到負號的指數時,要做一些改變。利用偏值表示法,真正的指數是指數欄位中的無號指數減去偏值。在IEEE 754的單精密度表示法是採用偏值127,

所以-1是-1+127=126表示,+1是1+127=128表示,因此浮點數字的值是以下列格式表示:

(-1)s×(1+有效數字)×2(指數-偏值)

單精密度表示法指數偏值是127,而倍精密度表示法指數偏值是1023。

範例:

試寫出數字-0.75的IEEE 754單精密與倍精密二進位表示法

解:

單精密表示法是(-1)s×(1+有效數字)×2(指數-127)

因此-0.75是 (-1)1×(1+.100000000000000000002)×2126

倍精密表示法是

(-1)1×(1+.10000000000000000000000000000000000000000000000000002)×21022

範例:

下面字組所表示的十進位數字是多少?

解:

正負位元是1,指數是129,有效數字是1×2-2=1/4或0.25

(-1)1×(1+有效數字)×2(指數-偏值)

=(-1)×(1+0.25)×2(129-127)

=-1×1.25×22

=-1.25×4

=-5.0

 


浮點加法

範例:

將數字0.510與-0.437510相加

解:

首先將兩個數字轉成二進位的正規科學記號。假設有四位元的精密度:

0.510=0.12=0.12x20=1.0002x2-1

-0.437510=-0.01112=-0.01112x20=-1.1102x22

依演算法的步驟:

  1. 較小數字的有效數字向右移位,直到其指數與較大數字的指數相同:

    -1.1102x2-2=-0.1112x2-1
  2. 將有效數字相加:

    1.02x2-1+(-0.1112x2-1)=0.0012x2-1
  3. 對和作正規化,並檢查是否有溢位與短值:

    0.0012x2-1=0.0102x2-2=0.1002x2-3=1.0002x2-4
  4. 將和作捨棄 1.0002x2-4
    和的有效數字可以容納在四個位元,所以沒有捨棄的必要。因此數字和是:

    1.0002x2-4=0.00012=0.062510

 


浮點乘法

範例:

將數字0.510與-0.437510相乘

解:

以二進位表示時,變成1.0002x2-1乘以-1.1002x2-2

  1. 直接將指數相加:(-1)+(-2)=-3
    或是利用偏值表示方式:

    (-1+127)+(-2+127)-127=124
  2. 將有效數字相乘:
              1.000
       x     1.110
    ----------------------
                     0000
                   1000
                  1000
                 1000
    ----------------------
                 1110000
  3. 檢查乘積是否正規化,是否有溢位或短值。
  4. 對乘積作四捨五入時,並沒有任何改變:
    1.1102x2-3