0,那么1+a一定大于1嗎?在數(shù)學(xué)上,答案是肯定的。但在計(jì)算機(jī)上,答案就與a的大小和浮點(diǎn)數(shù)的精度有關(guān)了。在matalb上,可以作以下計(jì)算:>>a">
浮點(diǎn)數(shù)的表示和精度

浮點(diǎn)數(shù)的表示和精度

ID:11131930

大?。?2.00 KB

頁數(shù):6頁

時(shí)間:2018-07-10

浮點(diǎn)數(shù)的表示和精度_第1頁
浮點(diǎn)數(shù)的表示和精度_第2頁
浮點(diǎn)數(shù)的表示和精度_第3頁
浮點(diǎn)數(shù)的表示和精度_第4頁
浮點(diǎn)數(shù)的表示和精度_第5頁
資源描述:

《浮點(diǎn)數(shù)的表示和精度》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、浮點(diǎn)數(shù)的表示和精度(2009-12-1717:03:57)轉(zhuǎn)載標(biāo)簽:it分類:C/C++如果a>0,那么1+a一定大于1嗎?在數(shù)學(xué)上,答案是肯定的。但在計(jì)算機(jī)上,答案就與a的大小和浮點(diǎn)數(shù)的精度有關(guān)了。在matalb上,可以作以下計(jì)算:>>a=1/2^52a=???2.220446049250313e-016>>1+a>1ans=????1>>a=1/2^53a=???1.110223024625157e-016>>1+a>1ans=????0可見,當(dāng)a等于1/2^53時(shí),1+a>1是不成立的。1浮點(diǎn)數(shù)IEEE754定義了單

2、精度浮點(diǎn)數(shù)和雙精度數(shù)浮點(diǎn)數(shù),即float和double。float有32bit,double有64bit。它們都包括符號位、指數(shù)和尾數(shù)。???符號位???指數(shù)???尾數(shù)float???31(1)???30-23(8)???22-0(23)double???63(1)???62-52(11)???51-0(52)符號位有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有特殊含義,不算正常

3、指數(shù)。???*float的指數(shù)部分有8bit,可以取值1~254,減掉127,得到對應(yīng)的指數(shù)范圍-126~127。???*double的指數(shù)部分有11位,可以取值1~2046,減掉1023,得到對應(yīng)的指數(shù)范圍-1022~1023。這里的指數(shù)是以2為底的,同樣尾數(shù)也是二進(jìn)制的。IEEE754要求浮點(diǎn)數(shù)以規(guī)范形式存儲,即小數(shù)點(diǎn)前有1位非零數(shù)字。對于二進(jìn)制數(shù),非零數(shù)字只有1。所以IEEE754在存儲時(shí)省略了這個(gè)小數(shù)點(diǎn)前面的1,只存儲小數(shù)點(diǎn)后面的位。2誤差看個(gè)例子,設(shè):?doublea=0.2;在PC上,我們可以看到a對應(yīng)的存儲區(qū)

4、數(shù)據(jù)是:9A9999999999C93FPC的數(shù)據(jù)是小尾的,即低位字節(jié)在后,將其寫成高位字節(jié)在前,得到:3FC999999999999A可見符號位為0。指數(shù)位是0x3FC,即1020,減掉1023,得到指數(shù)-3。尾數(shù)是999999999999A。所以完整的數(shù)字就是16進(jìn)制的1.999999999999A乘上2^-3。即:a=(1+9*(1/16+1/16^2+...+1/16^12)+10/16^13)*2^-3(1/16+...+1/16^12)可以用等比級數(shù)求和公式a1*(1-q^n)/(1-q)計(jì)算,其中a1=1/1

5、6,q=1/16,n=12,因此:a=(1+9*(1-1/16^12)/15+10/16^13)*2^-3用windows的計(jì)算器計(jì)算上式,得到a=0.20000000000000001110223024625157這也不是精確解,但已經(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/2^n)*2^e3精度可以把機(jī)器精度定義為滿足條件fl(1+ε)>1的最小浮點(diǎn)數(shù)ε。其中fl(1+ε)是1+ε的浮點(diǎn)表示。顯然

6、double的機(jī)器精度是1/2^52。float的機(jī)器精度是1/2^23。matlab內(nèi)部采用double,1+1/2^53對double來說就是1,所以1+1/2^53不會大于1。對于規(guī)范數(shù)來說,因?yàn)樾?shù)點(diǎn)前默認(rèn)有個(gè)1,所以float的有效數(shù)字是24bit,對應(yīng)8位十進(jìn)制有效數(shù)字;double的有效數(shù)字是53bit,對應(yīng)16位十進(jìn)制有效數(shù)字。4特殊的浮點(diǎn)數(shù)前面提到浮點(diǎn)數(shù)的指數(shù)全0或全1有特殊含義,讓我們來看看這些特殊的浮點(diǎn)數(shù):???*指數(shù)和尾數(shù)都是全0表示0。根據(jù)符號位不同可以分為+0和-0。???*指數(shù)全0,尾數(shù)不為全

7、0,這些數(shù)是非規(guī)范數(shù),即尾數(shù)部分不假設(shè)前面存在小數(shù)點(diǎn)前的1?;蛘哒f這些數(shù)太接近0了,因?yàn)橹笖?shù)已經(jīng)不能再小,所以這些數(shù)不能寫成規(guī)范形式。例如:double數(shù)0000000000000001的尾數(shù)是0000000000001,即1/2^52,對應(yīng)的數(shù)是1/(2^52)*2^-1022,即4.9406564584124654e-324。???*指數(shù)全1,尾數(shù)全0表示無窮大,即inf。根據(jù)符號位不同可以分為+inf和-inf。???*指數(shù)全1,尾數(shù)不為全0表示NaN,即NotaNumber,不是數(shù)。尾數(shù)最高位為1的NaN被稱作QN

8、aN(QuietNaN)。尾數(shù)最高位為0的NaN被稱作SNaN(SignallingNaN)。通常用QNaN表示不確定的操作,用SNaN表示無效的操作。在計(jì)算機(jī)內(nèi)部,double就是一個(gè)64位數(shù)。從0x0000000000000000~0xFFFFFFFFFFFFFFFF,每個(gè)64位數(shù)都對應(yīng)一個(gè)浮點(diǎn)數(shù)或

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。