???眾所周知,科學計數法既可以表示整數,也可以表示小數,并且表示的數據范圍很大。
?? 在計算機中也引入了類似于十進制科學計數法的方法來表示實數,稱為浮點數表示法,因其小數點位置不固定而得名。
?? 1.浮點數的表示方法。
?? 用浮點數表示法不僅可以表示整數和純小數,而且可以表示一般的實數,其表示范圍比定點數要大得多。因為無論采用定點還是浮點表示,n位編碼總是最多只能表示2n個數,所以采用浮點表示法雖然擴大了表示范圍,但并沒有增加可表示的數值的個數,只是數據間的間隔變稀疏了。
???
????? 一種浮點數的格式:
??????| Ms | Es | El-2 |...| E0 | M-1 | M-2 |...| M-(m-1) |
?????? ? 數符? 階符???階?????????? 碼?? 尾????????????????????? 數
?? 可見,浮點數的編碼由兩部分組成:階碼E和尾數M。浮點數表示的數值位:(-1)Ms · M · BE.
???其中,B是階碼的底,也就是尾數M的基數,一般為2。
?? E為階碼,即指數,為帶符號的定點整數,常用移碼表示,其中,Es為階符,表示階的正負。如果用移碼表示階碼E,當階碼被作為一個無符號整數對待時,其數的大小相對關系不變,為浮點數加減法時的對階運算提供了方便。
?? M是尾數,是定點純小數,常用補碼表示,也有用原碼表示的。Ms是尾數的符號位,安排在最高位,表示該浮點數的正負。
?? 浮點數的表示范圍主要由階碼決定,精度則由尾數決定。
?? 2.規格化浮點數。
?? 為了簡化浮點數的操作,充分利用尾數的二進制位數來表示更多的有效數字,通常采用浮點數規格化形式,即將位數的絕對值限定在某個范圍之內。一個規格化的數是一個有效數的最高有效位非0的數。
?? 如果階碼的底為2,則規格化浮點數的尾數應滿足條件:1/2<=|M|<1。
?? 當尾數用補碼表示時,若尾數M>=0,由于[1/2]補=0.10000..0 ,尾數應具有如下格式:
?????????????? M=0.1xxxx...x(其中x表示既可以為0也可以為1)
?? 若尾數M<0,由于[-1/2]補=1.10000..0,[-1]補=1.00000..0,為使計算機判斷方便,一般不把[-1/2]補列為規格化的數,而把[-1]補列為規格化的數,因此尾數應具有格式M=1.0xx...x,即:符號位為1,小數點右側的第一數值位為0時為規格化數。
???這樣:當M<0時,[-1]補<=[M]補<[-1/2] 補
???規格化操作有兩種,“左規”和“右規”。若采用變形補碼表示尾數,則當結果的尾數出現11.1xx..x或00.0xx..x的形式時,需將尾數左移1位,階碼減1,即111.xx..x或000.xx..x,直到尾數規格化為止,這個過程叫做“左規”。當浮點運算結果的位數出現01.xxx..x或10.xxx..x的形式時,并不一定溢出,應先將尾數右移一位,階碼+1,再判斷是否溢出,這個過程叫做“右規”。
?? 若采用上述規格化浮點數格式,以2位底,階碼L位(含一位階符),用移碼表示;尾數m位(含一位數符),則浮點數能表示的
?? 最小正數:? +(1-2-(m-1))·2(2^(l-1)-1)。
?? 最大正數:? +(2-2^(l-1))/2
???最大負數:? -(1/2+2-(m-1))·2-2^(l-1).
???最小負數:? -1·22^(l-1)-1。
???當一個數的大小超出了浮點數的表示范圍時,稱為溢出。溢出判斷只是對規格化的浮點數的階碼進行判斷。當階碼小于機器能表示的最小階碼時,稱為下溢,此時一般當做機器零處理,機器繼續運行;當階碼大于機器所能表示的最大階碼時,稱為上溢,這是機器必須轉入溢出故障的中斷處理程序進行相應的處理
????????????????????????????????? 零
????負上溢? |? 可表示的負數? |? 負下溢 | 正下溢 |?可表示的正數 | 正上溢
??? IEEE754標準規定浮點數的尾數用原碼(符號加絕對值)表示,對于用原碼表示的規格化的二進制浮點數,尾數有效位的第一位一定是1,而不是0,因此這個默認的1也省去了,從而使得有效位又增加一位,這樣,23位尾數的有效位長度實際是24位。
??? IEEE單精度浮點格式具有24位有效字符,字寬32位(1位符號,8位階碼,23位尾數);雙精度浮點格式具有53位幼小數字精度,字寬64位(1位符號,11位階碼,52位尾數)。
??? IEEE754標準另外一個特點是用特殊記號標記某些異常事件,記錄非規格化數,正無窮,負無窮,以及非數。
??? 在IEEE754標準中,基數隱含為2;階碼用移碼表示,移碼的偏移值并不是通常n位移碼所用的2n-1,而是2n-1-1,這是因為尾數規格化后必須為0.100..0,而我們現在尾數用1.000..00表示,即尾數左移1位,所以階碼偏移值為2n-1-1。
????
?????????????? IEEE754 單精度格式位模式表示的值
??????? 0<e<255???????????? |????????? (-1)s·2e-127·1.f?? (規格化數)
??????? e=0,f!=0??????????? |????????? (-1)s·2e-126·0.f??? (非規格化數)
??????? e=0,f=0???????????? |??????????(-1)s·0??????????? (有符號的0)
??????? s=0;e=255,f=0?????? |????????????正無窮
??????? s=1;e=255;f=0?????? |????????????負無窮
??????? s=u,e=255,f!=0??????|???????????非數
??????
???????
???????
?