




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、解讀IEEE標準754:浮點數(shù)表示一、背景在IEEE標準754之前,業(yè)界并沒有一個統(tǒng)一的浮點數(shù)標準,相反,很多計算機制造商都設(shè)計自己的浮點數(shù)規(guī)則,以及運算細節(jié)。那時,實現(xiàn)的速度和簡易性比數(shù)字的精確性更受重視。直到1985年Intel打算為其的8086微處理器引進一種浮點數(shù)協(xié)處理器的時候,聰明地意識到,作為設(shè)計芯片者的電子工程師和固體物理學家們,也許并不能通過數(shù)值分析來選擇最合理的浮點數(shù)二進制格式。于是Intel在請加州大學伯克利分校的 William Kahan教授最優(yōu)秀的數(shù)值分析家之一來為8087 FPU設(shè)計浮點數(shù)格式; 而這個家伙又找來兩個專家來協(xié)助他,于是就有了KCS組合(Kahn, C
2、oonan, and Stone)。他們共同完成了Intel的浮點數(shù)格式設(shè)計,而且完成地如此出色,以致于IEEE組織決定采用一個非常接近KCS的方案作為IEEE的標準浮點格式。目前,幾乎所有計算機都支持該標準,大大改善了科學應(yīng)用程序的可移植性。二、表示形式從表面上看,浮點數(shù)也是一串0和1構(gòu)成的位序列(bit sequence),并不是三頭六臂的怪物,更不會咬人。然而IEEE標準從邏輯上用三元組S,E,M表示一個數(shù)N,如下圖所示: N的實際值n由下列式子表示: 其中: n,s,e,m分別為N,S,E,M對應(yīng)的實際數(shù)值,而N,S,E,M僅僅是一串二進制位。 S(sign)表示N的符號位。對應(yīng)值s滿
3、足:n>0時,s=0; n<0時,s=1。 E(exponent)表示N的指數(shù)位,位于S和M之間的若干位。對應(yīng)值e值也可正可負。 M(mantissa)表示N的尾數(shù)位,恰好,它位于N末尾。M也叫有效數(shù)字位(sinificand)、系數(shù)位(coefficient), 甚至被稱作“小數(shù)”。三、浮點數(shù)格式IEEE標準754規(guī)定了三種浮點數(shù)格式:單精度、雙精度、擴展精度。前兩者正好對應(yīng)C語言里頭的float、double或者FORTRAN里頭的real、double精度類型。限于篇幅,本文僅介紹單精度、雙精度浮點格式。 單精度:N共32位,其中S占1位,E占8位,M占23位。 雙精度:N共
4、64位,其中S占1位,E占11位,M占52位。 值得注意的是,M雖然是23位或者52位,但它們只是表示小數(shù)點之后的二進制位數(shù),也就是說,假定 M為“010110011.”, 在二進制數(shù)值上其實是“.010110011.”。而事實上,標準規(guī)定小數(shù)點左邊還有一個隱含位,這個隱含位通常,哦不,應(yīng)該說絕大多數(shù)情況下是1,那什么情況下是0呢?答案是N對應(yīng)的n非常小的時候,比如小于 2(-126)(32位單精度浮點數(shù))。不要困惑怎么計算出來的,看到后面你就會明白??傊[含位算是賺來了一位精度,于是M對應(yīng)的m最后結(jié)果可能是"m=1.0101100
5、11.”或者“m=0.010110011.”四、計算e、m首先將提到令初學者頭疼的“規(guī)格化(normalized)”、“非規(guī)格化(denormalized)”。噢,其實并沒有這么難的,跟我來!掌握它以后你會發(fā)現(xiàn)一切都很優(yōu)雅,更美妙的是,規(guī)格化、非規(guī)格化本身的概念幾乎不怎么重要。請牢記這句話:規(guī)格化與否全看指數(shù)E!下面分三種情況討論E,并分別計算e和m:1、規(guī)格化:當E的二進制位不全為0,也不全為1時,N為規(guī)格化形式。此時e被解釋為表示偏置(biased)形式的整數(shù),e值計算公式如下圖所示:上圖中,|E|表示E的二進制序列表示的整數(shù)值,例如E為"10000100",則|E|=
6、132,e=132-127=5 。 k則表示E的位數(shù),對單精度來說,k=8,則bias=127,對雙精度來說,k=11,則bias=1023。此時m的計算公式如下圖所示:標準規(guī)定此時小數(shù)點左側(cè)的隱含位為1,那么m=|1.M|。如M="101",則|1.M|=|1.101|=1.625,即 m=1.6252、非規(guī)格化:當E的二進制位全部為0時,N為非規(guī)格化形式。此時e,m的計算都非常簡單。 注意,此時小數(shù)點左側(cè)的隱含位為0。 為什么e會等于(1-bias)而不是(-bias),這主要是為規(guī)格化數(shù)值、非規(guī)格化數(shù)值之間的平滑過渡設(shè)計
7、的。后文我們還會繼續(xù)討論。有了非規(guī)格化形式,我們就可以表示0了。把符號位S值1,其余所有位均置0后,我們得到了 -0.0; 同理,把所有位均置0,則得到 +0.0。非規(guī)格化數(shù)還有其他用途,比如表示非常接近0的小數(shù),而且這些小數(shù)均勻地接近0,稱為“逐漸下溢(gradually underflow)”屬性。3、特殊數(shù)值: 當E的二進制位全為1時為特殊數(shù)值。此時,若M的二進制位全為0,則n表示無窮大,若S為1則為負無窮大,若S為0則為正無窮大; 若M的二進制位不全為0時,表示NaN(Not a Number),表示這不是一個合法實數(shù)或無窮,或者該數(shù)未經(jīng)初始化。五、范例仔細研讀第四點后,再回憶一下文章
8、開頭計算n的公式,你應(yīng)該寫出一個浮點編碼的實際值n了吧? 還不能嗎?不急,我先給你示范一下。我們假定N是一個8位浮點數(shù),其中,S占1位,E占4位,M占3位。下面這張表羅列了N可能的正數(shù)形式,也包含了e、m等值,請你對照著這張表,重溫一下第四點,你會慢慢明白的。說實在的,這張表花了我不少功夫呢,幸好TeX畫表格還算省事!這張表里頭有很多有趣的地方,我提醒一下: 看 N 列,從上到下,二進制位表示是均勻遞增的,且增量都是一個最小二進制位。這不是偶然,正是巧妙設(shè)計的結(jié)果。觀察最大的非規(guī)格數(shù),發(fā)現(xiàn)恰好就是M全為1, E全為0的情況。于是我們求出最大的非規(guī)格數(shù)為:上面的公式中,h為M的位數(shù)(如范例中為3
9、)。注意,公式等號右邊的第一項同時又是最小規(guī)格數(shù)的值(如范例中為 8/512 );第二項則正是最小非規(guī)格數(shù)的值(如范例中為1/512)即該浮點數(shù)能表示的最小正數(shù)。 看 m 列,規(guī)格化數(shù)都是 1+ x 的形式,這個1正是隱含位1; 而非規(guī)格化數(shù)隱含位為0, 所以沒有 "1+" 。 看 n 列,非規(guī)格化數(shù)從上到下的增量都是 1/512, 且過渡到規(guī)格化數(shù)時,增量是平滑的,依舊是1/512。這正是非規(guī)格化數(shù)中e等于(1-bias)而不是(-bias)的緣故,也是巧妙設(shè)計的結(jié)果。 再繼續(xù)往下看,發(fā)現(xiàn)增量值逐漸增大。可見,浮點數(shù)的取值范圍不是均勻的。六、實戰(zhàn)我們用一小段匯編來測試一下
10、,浮點數(shù)在內(nèi)存中是如何表示的。測試環(huán)境: GentooLinux2006.0/GNU assembler version 2.16.1/GNU gdb 6.4/AMD XP1600+。 如下所示 代碼: /coding/assemble $ gdb(gdb) list1 .section .data2 f1:3 .float 54 &
11、#160; f2:5 .float 0.1 6 .section .text7 .global _start8 _start:9 nop10 (gdb) x/f &f10x80490a4 <f1>:
12、160; 5(gdb) x/xw &f10x80490a4 <f1>: 0x40a00000(gdb) x/f &f20x80490a8 <f2>: 0.100000001(gdb) x/xw &f20x80490a8 <f2>: 0x3dcccccd(gdb) 從上面的gdb命令結(jié)果可以看出,浮點數(shù)5被表示為 0x40a00000,二進制形式為( 0100 0000 1010 0000 . 0000 0
13、000)。紅色數(shù)字為E,可以看出|E|=129>0, 則e=129-bias=129-127=2 ; 藍色數(shù)字為M, 且|E|>0,說明是規(guī)格化數(shù),則m=|1.M|=|1.01000.000|=1.25 ; 由n的計算公式可以求得 n=(-1)0 * 1.25 * 22 = 5, 結(jié)果被驗證了。 同樣,你也可以驗證一下十進制浮點數(shù)0.1的二進制形式是否正確,你會發(fā)現(xiàn),0.1不能表示為有限個二進制位,因此在內(nèi)存中的表示是舍入(rounding)以后的結(jié)果,即 0x3dcccccd, 十進制為0.100000001, 誤差0.000000001由此產(chǎn)生了。 七、未完成 關(guān)于浮點數(shù),還有很多東西(比如舍入誤差、除零異常等等)值得我們深入探討,但已經(jīng)無法在此繼續(xù)。這篇文章的目的僅在初步解釋IEEE標準754對浮點數(shù)的規(guī)定以及一些奇妙的地方。寫這篇文章花掉了我整天的時間,但也使我徹底記住了以前讓我膽怯的東西最重要的是,希望這篇文章對大家有點用處,也算我為計算機科學基礎(chǔ)理論版以及L做的一點貢獻。 參考書目: : Randall H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漳州職業(yè)技術(shù)學院《金融審計》2023-2024學年第二學期期末試卷
- 江西管理職業(yè)學院《中國文化概況》2023-2024學年第二學期期末試卷
- 西北民族大學《框架技術(shù)實驗》2023-2024學年第二學期期末試卷
- 沈陽北軟信息職業(yè)技術(shù)學院《計算機在環(huán)境工程中的應(yīng)用》2023-2024學年第二學期期末試卷
- 鄭州商學院《理論力學A》2023-2024學年第二學期期末試卷
- 內(nèi)蒙古民族幼兒師范高等??茖W?!吨鞒炙囆g(shù)》2023-2024學年第二學期期末試卷
- 西北農(nóng)林科技大學《云計算與虛擬化技術(shù)》2023-2024學年第二學期期末試卷
- 石家莊科技職業(yè)學院《教育學專題研究》2023-2024學年第二學期期末試卷
- 人教版初中歷史與社會七年級上冊 3.3.1耕海牧漁 教學設(shè)計
- 南昌職業(yè)大學《創(chuàng)業(yè)基礎(chǔ)創(chuàng)新教育》2023-2024學年第二學期期末試卷
- g4l操作指南教程硬盤克隆linux系統(tǒng)備份恢復(fù)帶截圖
- 油缸裝配作業(yè)指導書
- 消化道大出血的鑒別診斷和處理原則課件
- 教師課堂教學技能課件
- 員工調(diào)整薪酬面談表
- 輔警報名登記表
- 外研版英語五年級下冊第一單元全部試題
- 培養(yǎng)小學生課外閱讀興趣課題研究方案
- 部編版四年級語文下冊課程綱要
- 【課件】第二單元第三節(jié)漢族民歌課件-2021-2022學年高中音樂人音版(2019)必修音樂鑒賞
- 華文出版社三年級下冊書法教案
評論
0/150
提交評論