




免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
浮點(diǎn)數(shù)的表示和精度(2009-12-17 17:03:57) 轉(zhuǎn)載標(biāo)簽: it分類:C/C+如果a0,那么1+a一定大于1嗎?在數(shù)學(xué)上,答案是肯定的。但在計(jì)算機(jī)上,答案就與a的大小和浮點(diǎn)數(shù)的精度有關(guān)了。在matalb上,可以作以下計(jì)算: a=1/252a = 2.220446049250313e-016 1+a1ans = 1 a=1/253a = 1.110223024625157e-016 1+a1ans = 0可見,當(dāng)a等于1/253時(shí),1+a1是不成立的。1 浮點(diǎn)數(shù)IEEE754定義了單精度浮點(diǎn)數(shù)和雙精度數(shù)浮點(diǎn)數(shù),即float和double。float有32bit,double有64bit。它們都包括符號(hào)位、指數(shù)和尾數(shù)。 符號(hào)位 指數(shù) 尾數(shù)float 31(1) 30-23(8) 22-0(23)double 63(1) 62-52(11) 51-0(52)符號(hào)位有1bit,0表示正、1表示負(fù)。設(shè)一個(gè)數(shù)的指數(shù)是e,指數(shù)部分的值是bias+e。加上一個(gè)bias是為了表示負(fù)數(shù)。 float的bias是127,double的bias是1023。指數(shù)全0或全1有特殊含義,不算正常指數(shù)。 * float的指數(shù)部分有8bit,可以取值1254,減掉127,得到對(duì)應(yīng)的指數(shù)范圍-126127。 * double的指數(shù)部分有11位,可以取值12046,減掉1023,得到對(duì)應(yīng)的指數(shù)范圍-10221023。這里的指數(shù)是以2為底的,同樣尾數(shù)也是二進(jìn)制的。IEEE754要求浮點(diǎn)數(shù)以規(guī)范形式存儲(chǔ),即小數(shù)點(diǎn)前有1位非零數(shù)字。對(duì)于二進(jìn)制數(shù),非零數(shù)字只有1。所以IEEE754在存儲(chǔ)時(shí)省略了這個(gè)小數(shù)點(diǎn)前面的1,只存儲(chǔ)小數(shù)點(diǎn)后面的位。2 誤差看個(gè)例子,設(shè):double a=0.2;在PC上,我們可以看到a對(duì)應(yīng)的存儲(chǔ)區(qū)數(shù)據(jù)是:9A 99 99 99 99 99 C9 3FPC的數(shù)據(jù)是小尾的,即低位字節(jié)在后,將其寫成高位字節(jié)在前,得到:3F C9 99 99 99 99 99 9A可見符號(hào)位為0。指數(shù)位是0x3FC,即1020,減掉1023,得到指數(shù)-3。尾數(shù)是999999999999A。所以完整的數(shù)字就是16進(jìn)制的1.999999999999A乘上2-3。即:a=(1+9*(1/16+1/162+.+1/1612)+10/1613)*2-3(1/16+.+1/1612)可以用等比級(jí)數(shù)求和公式a1*(1-qn)/(1-q)計(jì)算,其中a1=1/16,q=1/16,n=12,因此:a=(1+9*(1-1/1612)/15+10/1613)*2-3用windows的計(jì)算器計(jì)算上式,得到a=0.2000 0000 0000 0000 1110 2230 2462 5157這也不是精確解,但已經(jīng)可以看到用double表示0.2時(shí)存在的誤差。這個(gè)例子說明在用有限字長的二進(jìn)制浮點(diǎn)數(shù)表示任意實(shí)數(shù)a可能引入誤差。設(shè)實(shí)數(shù)a的指數(shù)為e,尾數(shù)位數(shù)為n,顯然:誤差1的最小浮點(diǎn)數(shù)。其中fl(1+)是1+的浮點(diǎn)表示。顯然double的機(jī)器精度是1/252。float的機(jī)器精度是1/223。 matlab內(nèi)部采用double,1+1/253對(duì)double來說就是1,所以1+1/253不會(huì)大于1。對(duì)于規(guī)范數(shù)來說,因?yàn)樾?shù)點(diǎn)前默認(rèn)有個(gè)1,所以float的有效數(shù)字是24bit,對(duì)應(yīng)8位十進(jìn)制有效數(shù)字; double的有效數(shù)字是53bit,對(duì)應(yīng)16位十進(jìn)制有效數(shù)字。4 特殊的浮點(diǎn)數(shù)前面提到浮點(diǎn)數(shù)的指數(shù)全0或全1有特殊含義,讓我們來看看這些特殊的浮點(diǎn)數(shù): * 指數(shù)和尾數(shù)都是全0表示0。根據(jù)符號(hào)位不同可以分為+0和-0。 * 指數(shù)全0,尾數(shù)不為全0,這些數(shù)是非規(guī)范數(shù),即尾數(shù)部分不假設(shè)前面存在小數(shù)點(diǎn)前的1?;蛘哒f這些數(shù)太接近0了,因?yàn)橹笖?shù)已經(jīng)不能再小,所以這些數(shù)不能寫成規(guī)范形式。例如:double數(shù)0000 0000 0000 0001的尾數(shù)是0 0000 0000 0001,即1/252,對(duì)應(yīng)的數(shù)是1/(252)*2-1022,即4.9406564584124654e-324。 * 指數(shù)全1,尾數(shù)全0表示無窮大,即inf。根據(jù)符號(hào)位不同可以分為+inf和-inf。 * 指數(shù)全1,尾數(shù)不為全0表示NaN,即Not a Number,不是數(shù)。尾數(shù)最高位為1的NaN被稱作QNaN(Quiet NaN)。尾數(shù)最高位為0的NaN被稱作SNaN(Signalling NaN)。通常用QNaN表示不確定的操作,用SNaN表示無效的操作。在計(jì)算機(jī)內(nèi)部,double就是一個(gè)64位數(shù)。從0x0000 0000 0000 00000xFFFF FFFF FFFF FFFF,每個(gè)64位數(shù)都對(duì)應(yīng)一個(gè)浮點(diǎn)數(shù)或NaN。我寫了一個(gè)小程序,按照64位無符號(hào)整數(shù)的順序打印出典型的浮點(diǎn)數(shù)。表格的第一列是浮點(diǎn)數(shù)的內(nèi)部表示。為了便于閱讀,按大尾順序輸出。第二列是對(duì)應(yīng)的浮點(diǎn)數(shù)。第三列是注釋,對(duì)于非規(guī)范數(shù)和規(guī)范數(shù)給出了由內(nèi)部表示計(jì)算數(shù)值的matlab算式。注意在 C/C+中,252要寫成pow(2.0,52.0)。0000 0000 0000 0000 0.0000000000000000e+000 +00000 0000 0000 0001 4.9406564584124654e-324 1/(252)*2-1022000F FFFF FFFF FFFF 2.2250738585072009e-308 .5*(1-.552)/(1-.5)*2-10220010 0000 0000 0000 2.2250738585072014e-308 1.0*2-10220010 0000 0000 0001 2.2250738585072019e-308 (1+1/252)*2(-1022)001F FFFF FFFF FFFF 4.4501477170144023e-308 (1+.5*(1-.552)/(1-.5)*2-10220020 0000 0000 0000 4.4501477170144028e-308 1.0*2-10213FF0 0000 0000 0000 1.0000000000000000e+000 1.03FF0 0000 0000 0001 1.0000000000000002e+000 1.0+1/(252)3FFF FFFF FFFF FFFF 1.9999999999999998e+000 1+.5*(1-.552)/(1-.5)4000 0000 0000 0000 2.0000000000000000e+000 1.0*217FEF FFFF FFFF FFFF 1.7976931348623157e+308 (1+.5*(1-.552)/(1-.5)*210237FF0 0000 0000 0000 1.#INF000000000000e+000 +INF7FF0 0000 0000 0001 1.#SNAN00000000000e+000 SNaN7FF7 FFFF FFFF FFFF 1.#SNAN00000000000e+000 SNaN7FF8 0000 0000 0000 1.#QNAN00000000000e+000 QNaN7FFF FFFF FFFF FFFF 1.#QNAN00000000000e+000 QNaN8000 0000 0000 0000 0.0000000000000000e+000 -08000 0000 0000 0001 -4.9406564584124654e-324 -(1/(252)*2-1022)800F FFFF FFFF FFFF -2.2250738585072009e-308 -(.5*(1-.552)/(1-.5)*2-1022)8010 0000 0000 0000 -2.2250738585072014e-308 -(1.0*2-1022)8010 0000 0000 0001 -2.2250738585072019e-308 -(1+1/252)*2(-1022)801F FFFF FFFF FFFF -4.4501477170144023e-308 -(1+.5*(1-.552)/(1-.5)*2-1022)8020 0000 0000 0000 -4.4501477170144028e-308 -(1.0*2-1021)BFF0 0000 0000 0000 -1.0000000000000000e+000 -1.0BFFF FFFF FFFF FFFF -1.9999999999999998e+000 -(1+.5*(1-.552)/(1-.5)C000 0000 0000 0000 -2.0000000000000000e+000 -(1.0*21)FFEF FFFF FFFF FFFF -1.7976931348623157e+308 -(1+.5*(1-.552)/(1-.5)*21023)FFF0 0000 0000 0000 -1.#INF000000000000e+000 -INFFFF0 0000 0000 0001 -1.#SNAN00000000000e+000 SNaNFFF7 FFFF FFFF FFFF -1.#SNAN00000000000e+000 SNaNFFF8 0000 0000 0000 -1.#IND000000000000e+000 QNaNFFFF FFFF FFFF FFFF -1.#QNAN00000000000e+000 QNaN從表中可以看到,double內(nèi)部表示的設(shè)計(jì)是很有規(guī)律的,按照對(duì)應(yīng)64位數(shù)的順序依次為 +0、正非規(guī)范數(shù)、正規(guī)范數(shù)、正無窮大、符號(hào)位為正的NaN、-0、負(fù)非規(guī)范數(shù)、負(fù)規(guī)范數(shù)、負(fù)無窮大、符號(hào)位為負(fù)的NaN。double內(nèi)部表示的設(shè)計(jì)保持了浮點(diǎn)數(shù)的有序性。即:如果正double數(shù)a正double數(shù)b,則a對(duì)應(yīng)的64位無符號(hào)整數(shù)b對(duì)應(yīng)的64位無符號(hào)整數(shù)。負(fù)數(shù)因?yàn)椴盍藗€(gè)符號(hào),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游行業(yè)創(chuàng)新與節(jié)日營銷策略
- 安全隱患排查指南
- 內(nèi)河游艇培訓(xùn)管理辦法
- 江蘇灘涂用地管理辦法
- PLC控制系統(tǒng)的換熱站系統(tǒng)研究
- 液壓傳動(dòng)控制系統(tǒng)在機(jī)械設(shè)計(jì)制造領(lǐng)域的應(yīng)用現(xiàn)狀及趨勢分析
- 智慧課堂效果評(píng)價(jià)與路徑優(yōu)化研究
- 外出打車報(bào)銷管理辦法
- 普查經(jīng)費(fèi)管理辦法信息
- S企業(yè)價(jià)值鏈成本控制優(yōu)化策略及實(shí)施研究
- 檢驗(yàn)科管理手冊
- 行車安全風(fēng)險(xiǎn)點(diǎn)告知牌
- 2019-2020鞍山八年第二學(xué)期語文期末考試帶答案
- 心臟粘液瘤超聲診斷
- 國家開放大學(xué)電大2022年春季期末考試《商務(wù)英語閱讀》試題試卷代號(hào)4050
- 2023年音樂考試真題
- NB/T 10751-2021礦用往復(fù)式氣動(dòng)注漿泵
- 裝卸搬運(yùn)課件
- GB/T 18391.2-2009信息技術(shù)元數(shù)據(jù)注冊系統(tǒng)(MDR)第2部分:分類
- GB/T 16924-2008鋼件的淬火與回火
- 基礎(chǔ)護(hù)理學(xué):肌內(nèi)注射
評(píng)論
0/150
提交評(píng)論