IEEE745浮點(diǎn)數(shù)標(biāo)準(zhǔn)_第1頁(yè)
IEEE745浮點(diǎn)數(shù)標(biāo)準(zhǔn)_第2頁(yè)
IEEE745浮點(diǎn)數(shù)標(biāo)準(zhǔn)_第3頁(yè)
IEEE745浮點(diǎn)數(shù)標(biāo)準(zhǔn)_第4頁(yè)
IEEE745浮點(diǎn)數(shù)標(biāo)準(zhǔn)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、標(biāo)題: 解讀IEEE標(biāo)準(zhǔn)754:浮點(diǎn)數(shù)表示一、 背景在IEEE標(biāo)準(zhǔn)754之前,業(yè)界并沒(méi)有一個(gè)統(tǒng)一的浮點(diǎn)數(shù)標(biāo)準(zhǔn),相反,很多計(jì)算機(jī)制造商都設(shè)計(jì)自己的浮點(diǎn)數(shù)規(guī)則,以及運(yùn)算細(xì)節(jié)。那時(shí),實(shí)現(xiàn)的速度和簡(jiǎn)易性比數(shù)字的精確性更受重視。直到1985年Intel打算為其的8086微處理器引進(jìn)一種浮點(diǎn)數(shù)協(xié)處理器的時(shí)候,聰明地意識(shí)到,作為設(shè)計(jì)芯片者的電子工程師和固體物理學(xué)家們,也許并不能通過(guò)數(shù)值分析來(lái)選擇最合理的浮點(diǎn)數(shù)二進(jìn)制格式。于是Intel在請(qǐng)加州大學(xué)伯克利分校的 William Kahan教授最優(yōu)秀的數(shù)值分析家之一來(lái)為8087 FPU設(shè)計(jì)浮點(diǎn)數(shù)格式; 而這個(gè)家伙又找來(lái)兩個(gè)專家來(lái)協(xié)助他,于是就有了KCS組合(Ka

2、hn, Coonan, and Stone)。他們共同完成了Intel的浮點(diǎn)數(shù)格式設(shè)計(jì),而且完成地如此出色,以致于IEEE組織決定采用一個(gè)非常接近KCS的方案作為IEEE的標(biāo)準(zhǔn)浮點(diǎn)格式。目前,幾乎所有計(jì)算機(jī)都支持該標(biāo)準(zhǔn),大大改善了科學(xué)應(yīng)用程序的可移植性。二、 表示形式從表面上看,浮點(diǎn)數(shù)也是一串0和1構(gòu)成的位序列(bit sequence),并不是三頭六臂的怪物,更不會(huì)咬人。然而IEEE標(biāo)準(zhǔn)從邏輯上用三元組S,E,M表示一個(gè)數(shù)N,如下圖所示:N的實(shí)際值n由下列式子表示:其中: n,s,e,m分別為N,S,E,M對(duì)應(yīng)的實(shí)際數(shù)值,而N,S,E,M僅僅是一串二進(jìn)制位。 S(sign)表示N的符號(hào)位。對(duì)

3、應(yīng)值s滿足:n>0時(shí),s=0; n<0時(shí),s=1。 E(exponent)表示N的指數(shù)位,位于S和M之間的若干位。對(duì)應(yīng)值e值也可正可負(fù)。 M(mantissa)表示N的尾數(shù)位,恰好,它位于N末尾。M也叫有效數(shù)字位(sinificand)、系數(shù)位(coefficient), 甚至被稱作“小數(shù)”。三、浮點(diǎn)數(shù)格式IEEE標(biāo)準(zhǔn)754規(guī)定了三種浮點(diǎn)數(shù)格式:?jiǎn)尉取㈦p精度、擴(kuò)展精度。前兩者正好對(duì)應(yīng)C語(yǔ)言里頭的float、double或者FORTRAN里頭的real、double精度類型。限于篇幅,本文僅介紹單精度、雙精度浮點(diǎn)格式。 單精度:N共32位,其中S占1位,E占8位,M占23位。 雙精

4、度:N共64位,其中S占1位,E占11位,M占52位。值得注意的是,M雖然是23位或者52位,但它們只是表示小數(shù)點(diǎn)之后的二進(jìn)制位數(shù),也就是說(shuō),假定 M為“010110011.”, 在二進(jìn)制數(shù)值上其實(shí)是“.010110011.”。而事實(shí)上,標(biāo)準(zhǔn)規(guī)定小數(shù)點(diǎn)左邊還有一個(gè)隱含位,這個(gè)隱含位通常,哦不,應(yīng)該說(shuō)絕大多數(shù)情況下是1,那什么情況下是0呢?答案是N對(duì)應(yīng)的n非常小的時(shí)候,比如小于 2(-126)(32位單精度浮點(diǎn)數(shù))。不要困惑怎么計(jì)算出來(lái)的,看到后面你就會(huì)明白??傊?,隱含位算是賺來(lái)了一位精度,于是M對(duì)應(yīng)的m最后結(jié)果可能是"m=1.010110011.”或者“m=0.010110011.”

5、三、 計(jì)算e、m首先將提到令初學(xué)者頭疼的“規(guī)格化(normalized)”、“非規(guī)格化(denormalized)”。噢,其實(shí)并沒(méi)有這么難的,跟我來(lái)!掌握它以后你會(huì)發(fā)現(xiàn)一切都很優(yōu)雅,更美妙的是,規(guī)格化、非規(guī)格化本身的概念幾乎不怎么重要。請(qǐng)牢記這句話:規(guī)格化與否全看指數(shù)E!下面分三種情況討論E,并分別計(jì)算e和m:1、規(guī)格化:當(dāng)E的二進(jìn)制位不全為0,也不全為1時(shí),N為規(guī)格化形式。此時(shí)e被解釋為表示偏置(biased)形式的整數(shù),e值計(jì)算公式如下圖所示:上圖中,|E|表示E的二進(jìn)制序列表示的整數(shù)值,例如E為"10000100",則|E|=132,e=132-127=5 。 k則表

6、示E的位數(shù),對(duì)單精度來(lái)說(shuō),k=8,則bias=127,對(duì)雙精度來(lái)說(shuō),k=11,則bias=1023。此時(shí)m的計(jì)算公式如下圖所示:標(biāo)準(zhǔn)規(guī)定此時(shí)小數(shù)點(diǎn)左側(cè)的隱含位為1,那么m=|1.M|。如M="101",則|1.M|=|1.101|=1.625,即 m=1.6252、非規(guī)格化:當(dāng)E的二進(jìn)制位全部為0時(shí),N為非規(guī)格化形式。此時(shí)e,m的計(jì)算都非常簡(jiǎn)單。注意,此時(shí)小數(shù)點(diǎn)左側(cè)的隱含位為0。   為什么e會(huì)等于(1-bias)而不是(-bias),這主要是為規(guī)格化數(shù)值、非規(guī)格化數(shù)值之間的平滑過(guò)渡設(shè)計(jì)的。后文我們還會(huì)繼續(xù)討論。有了非規(guī)格化形式,我們就可以表示0了。把符

7、號(hào)位S值1,其余所有位均置0后,我們得到了 -0.0; 同理,把所有位均置0,則得到 +0.0。非規(guī)格化數(shù)還有其他用途,比如表示非常接近0的小數(shù),而且這些小數(shù)均勻地接近0,稱為“逐漸下溢(gradually underflow)”屬性。3、特殊數(shù)值: 當(dāng)E的二進(jìn)制位全為1時(shí)為特殊數(shù)值。此時(shí),若M的二進(jìn)制位全為0,則n表示無(wú)窮大,若S為1則為負(fù)無(wú)窮大,若S為0則為正無(wú)窮大; 若M的二進(jìn)制位不全為0時(shí),表示NaN(Not a Number),表示這不是一個(gè)合法實(shí)數(shù)或無(wú)窮,或者該數(shù)未經(jīng)初始化。四、 范例仔細(xì)研讀第四點(diǎn)后,再回憶一下文章開(kāi)頭計(jì)算n的公式,你應(yīng)該寫(xiě)出一個(gè)浮點(diǎn)編碼的實(shí)際值n了吧? 還不能嗎

8、?不急,我先給你示范一下。我們假定N是一個(gè)8位浮點(diǎn)數(shù),其中,S占1位,E占4位,M占3位。下面這張表羅列了N可能的正數(shù)形式,也包含了e、m等值,請(qǐng)你對(duì)照著這張表,重溫一下第四點(diǎn),你會(huì)慢慢明白的。說(shuō)實(shí)在的,這張表花了我不少功夫呢,幸好TeX畫(huà)表格還算省事!這張表里頭有很多有趣的地方,我提醒一下: 看 N 列,從上到下,二進(jìn)制位表示是均勻遞增的,且增量都是一個(gè)最小二進(jìn)制位。這不是偶然,正是巧妙設(shè)計(jì)的結(jié)果。觀察最大的非規(guī)格數(shù),發(fā)現(xiàn)恰好就是M全為1, E全為0的情況。于是我們求出最大的非規(guī)格數(shù)為:上面的公式中,h為M的位數(shù)(如范例中為3)。注意,公式等號(hào)右邊的第一項(xiàng)同時(shí)又是最小規(guī)格數(shù)的值(如范例中為

9、8/512 );第二項(xiàng)則正是最小非規(guī)格數(shù)的值(如范例中為1/512)即該浮點(diǎn)數(shù)能表示的最小正數(shù)。 看 m 列,規(guī)格化數(shù)都是 1+ x 的形式,這個(gè)1正是隱含位1; 而非規(guī)格化數(shù)隱含位為0, 所以沒(méi)有 "1+" 。 看 n 列,非規(guī)格化數(shù)從上到下的增量都是 1/512, 且過(guò)渡到規(guī)格化數(shù)時(shí),增量是平滑的,依舊是1/512。這正是非規(guī)格化數(shù)中e等于(1-bias)而不是(-bias)的緣故,也是巧妙設(shè)計(jì)的結(jié)果。 再繼續(xù)往下看,發(fā)現(xiàn)增量值逐漸增大。可見(jiàn),浮點(diǎn)數(shù)的取值范圍不是均勻的。五、 實(shí)戰(zhàn)我們用一小段匯編來(lái)測(cè)試一下,浮點(diǎn)數(shù)在內(nèi)存中是如何表示的。測(cè)試環(huán)境: GentooLinux

10、2006.0/GNU assembler version /GNU gdb 6.4/AMD XP1600+。 如下所示代碼:/coding/assemble $  gdb(gdb) list1    .section .data2    f1:3        .float  54    f2:5        .float  0.1  

11、  6    .section .text7        .global _start8    _start:9        nop10    (gdb) x/f &f10x80490a4 <f1>:    5(gdb) x/xw &f10x80490a4 <f1>:   

12、0x40a00000(gdb) x/f &f20x80490a8 <f2>:    0.100000001(gdb) x/xw &f20x80490a8 <f2>:    0x3dcccccd(gdb) 從上面的gdb命令結(jié)果可以看出,浮點(diǎn)數(shù)5被表示為 0x40a00000,二進(jìn)制形式為( 0100 0000 1010 0000 . 0000 0000)。紅色數(shù)字為E,可以看出|E|=129>0, 則e=129-bias=129-127=2 ; 藍(lán)色數(shù)字為M, 且|E|>0,說(shuō)明是規(guī)格化數(shù),則m=|1.M|=|1.01000.000|=1.25 ; 由n的計(jì)算公式可以求得 n=(-1)0 * 1.25 * 22  = 5, 結(jié)果被驗(yàn)證了。 同樣,你也可以驗(yàn)證一下十進(jìn)制浮點(diǎn)數(shù)0.1的二進(jìn)制形式是否正確,你會(huì)發(fā)現(xiàn),0.1不能表示為有限個(gè)二進(jìn)制位,因此在內(nèi)存中的表示是舍入(rounding)以后的結(jié)果,即 0x3dcccccd, 十進(jìn)制為0.100000001,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論