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

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

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

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

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

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

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

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

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

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

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

?? 若采用上述規(guī)格化浮點(diǎn)數(shù)格式,以2位底,階碼L位(含一位階符),用移碼表示;尾數(shù)m位(含一位數(shù)符),則浮點(diǎn)數(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)一個(gè)數(shù)的大小超出了浮點(diǎn)數(shù)的表示范圍時(shí),稱為溢出。溢出判斷只是對(duì)規(guī)格化的浮點(diǎn)數(shù)的階碼進(jìn)行判斷。當(dāng)階碼小于機(jī)器能表示的最小階碼時(shí),稱為下溢,此時(shí)一般當(dāng)做機(jī)器零處理,機(jī)器繼續(xù)運(yùn)行;當(dāng)階碼大于機(jī)器所能表示的最大階碼時(shí),稱為上溢,這是機(jī)器必須轉(zhuǎn)入溢出故障的中斷處理程序進(jìn)行相應(yīng)的處理


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

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

??? 在IEEE754標(biāo)準(zhǔn)中,基數(shù)隱含為2;階碼用移碼表示,移碼的偏移值并不是通常n位移碼所用的2n-1,而是2n-1-1,這是因?yàn)槲矓?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??????????? (有符號(hào)的0)

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

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

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





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