???眾所周知,科學(xué)計數(shù)法既可以表示整數(shù),也可以表示小數(shù),并且表示的數(shù)據(jù)范圍很大。
?? 在計算機中也引入了類似于十進制科學(xué)計數(shù)法的方法來表示實數(shù),稱為浮點數(shù)表示法,因其小數(shù)點位置不固定而得名。

?? 1.浮點數(shù)的表示方法。

?? 用浮點數(shù)表示法不僅可以表示整數(shù)和純小數(shù),而且可以表示一般的實數(shù),其表示范圍比定點數(shù)要大得多。因為無論采用定點還是浮點表示,n位編碼總是最多只能表示2n個數(shù),所以采用浮點表示法雖然擴大了表示范圍,但并沒有增加可表示的數(shù)值的個數(shù),只是數(shù)據(jù)間的間隔變稀疏了。
???
????? 一種浮點數(shù)的格式:

??????| Ms | Es | El-2 |...| E0 | M-1 | M-2 |...| M-(m-1) |
?????? ? 數(shù)符? 階符???階?????????? 碼?? 尾????????????????????? 數(shù)

?? 可見,浮點數(shù)的編碼由兩部分組成:階碼E和尾數(shù)M。浮點數(shù)表示的數(shù)值位:(-1)Ms · M · BE.
???其中,B是階碼的底,也就是尾數(shù)M的基數(shù),一般為2。
?? E為階碼,即指數(shù),為帶符號的定點整數(shù),常用移碼表示,其中,Es為階符,表示階的正負(fù)。如果用移碼表示階碼E,當(dāng)階碼被作為一個無符號整數(shù)對待時,其數(shù)的大小相對關(guān)系不變,為浮點數(shù)加減法時的對階運算提供了方便。
?? M是尾數(shù),是定點純小數(shù),常用補碼表示,也有用原碼表示的。Ms是尾數(shù)的符號位,安排在最高位,表示該浮點數(shù)的正負(fù)。

?? 浮點數(shù)的表示范圍主要由階碼決定,精度則由尾數(shù)決定。

?? 2.規(guī)格化浮點數(shù)。

?? 為了簡化浮點數(shù)的操作,充分利用尾數(shù)的二進制位數(shù)來表示更多的有效數(shù)字,通常采用浮點數(shù)規(guī)格化形式,即將位數(shù)的絕對值限定在某個范圍之內(nèi)。一個規(guī)格化的數(shù)是一個有效數(shù)的最高有效位非0的數(shù)。
?? 如果階碼的底為2,則規(guī)格化浮點數(shù)的尾數(shù)應(yīng)滿足條件:1/2<=|M|<1。
?? 當(dāng)尾數(shù)用補碼表示時,若尾數(shù)M>=0,由于[1/2]=0.10000..0 ,尾數(shù)應(yīng)具有如下格式:
?????????????? M=0.1xxxx...x(其中x表示既可以為0也可以為1)

?? 若尾數(shù)M<0,由于[-1/2]=1.10000..0,[-1]=1.00000..0,為使計算機判斷方便,一般不把[-1/2]列為規(guī)格化的數(shù),而把[-1]列為規(guī)格化的數(shù),因此尾數(shù)應(yīng)具有格式M=1.0xx...x,即:符號位為1,小數(shù)點右側(cè)的第一數(shù)值位為0時為規(guī)格化數(shù)。

???這樣:當(dāng)M<0時,[-1]<=[M]<[-1/2]

???規(guī)格化操作有兩種,“左規(guī)”和“右規(guī)”。若采用變形補碼表示尾數(shù),則當(dāng)結(jié)果的尾數(shù)出現(xiàn)11.1xx..x或00.0xx..x的形式時,需將尾數(shù)左移1位,階碼減1,即111.xx..x或000.xx..x,直到尾數(shù)規(guī)格化為止,這個過程叫做“左規(guī)”。當(dāng)浮點運算結(jié)果的位數(shù)出現(xiàn)01.xxx..x或10.xxx..x的形式時,并不一定溢出,應(yīng)先將尾數(shù)右移一位,階碼+1,再判斷是否溢出,這個過程叫做“右規(guī)”。

?? 若采用上述規(guī)格化浮點數(shù)格式,以2位底,階碼L位(含一位階符),用移碼表示;尾數(shù)m位(含一位數(shù)符),則浮點數(shù)能表示的

?? 最小正數(shù):? +(1-2-(m-1))·2(2^(l-1)-1)

?? 最大正數(shù):? +(2-2^(l-1))/2

???最大負(fù)數(shù):? -(1/2+2-(m-1))·2-2^(l-1).

???最小負(fù)數(shù):? -1·22^(l-1)-1

???當(dāng)一個數(shù)的大小超出了浮點數(shù)的表示范圍時,稱為溢出。溢出判斷只是對規(guī)格化的浮點數(shù)的階碼進行判斷。當(dāng)階碼小于機器能表示的最小階碼時,稱為下溢,此時一般當(dāng)做機器零處理,機器繼續(xù)運行;當(dāng)階碼大于機器所能表示的最大階碼時,稱為上溢,這是機器必須轉(zhuǎn)入溢出故障的中斷處理程序進行相應(yīng)的處理


????????????????????????????????? 零
????負(fù)上溢? |? 可表示的負(fù)數(shù)? |? 負(fù)下溢 | 正下溢 |?可表示的正數(shù) | 正上溢

??? IEEE754標(biāo)準(zhǔn)規(guī)定浮點數(shù)的尾數(shù)用原碼(符號加絕對值)表示,對于用原碼表示的規(guī)格化的二進制浮點數(shù),尾數(shù)有效位的第一位一定是1,而不是0,因此這個默認(rèn)的1也省去了,從而使得有效位又增加一位,這樣,23位尾數(shù)的有效位長度實際是24位。
??? IEEE單精度浮點格式具有24位有效字符,字寬32位(1位符號,8位階碼,23位尾數(shù));雙精度浮點格式具有53位幼小數(shù)字精度,字寬64位(1位符號,11位階碼,52位尾數(shù))。
??? IEEE754標(biāo)準(zhǔn)另外一個特點是用特殊記號標(biāo)記某些異常事件,記錄非規(guī)格化數(shù),正無窮,負(fù)無窮,以及非數(shù)。

??? 在IEEE754標(biāo)準(zhǔn)中,基數(shù)隱含為2;階碼用移碼表示,移碼的偏移值并不是通常n位移碼所用的2n-1,而是2n-1-1,這是因為尾數(shù)規(guī)格化后必須為0.100..0,而我們現(xiàn)在尾數(shù)用1.000..00表示,即尾數(shù)左移1位,所以階碼偏移值為2n-1-1。
????

?????????????? IEEE754 單精度格式位模式表示的值

??????? 0<e<255???????????? |????????? (-1)s·2e-127·1.f?? (規(guī)格化數(shù))

??????? e=0,f!=0??????????? |????????? (-1)s·2e-126·0.f??? (非規(guī)格化數(shù))

??????? e=0,f=0???????????? |??????????(-1)s·0??????????? (有符號的0)

??????? s=0;e=255,f=0?????? |????????????正無窮

??????? s=1;e=255;f=0?????? |????????????負(fù)無窮

??????? s=u,e=255,f!=0??????|???????????非數(shù)
??????





???????
???????
?