下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
float和double的范圍和精度float與double的范圍和精度1范圍float和double的范圍是由指數(shù)的位數(shù)來決定的。float的指數(shù)位有8位,而double的指數(shù)位有11位,分布如下:float:1bit(符號(hào)位)8bits(指數(shù)位)23bits(尾數(shù)位)double:1bit(符號(hào)位)11bits(指數(shù)位)52bits(尾數(shù)位)在數(shù)學(xué)中,特別是在計(jì)算機(jī)相關(guān)的數(shù)字(浮點(diǎn)數(shù))問題的表述中,有一個(gè)基本表達(dá)法[1:]valueoffloating-point=significandxbase八exponent,withsignF.1譯為中文表達(dá)即為:(浮點(diǎn))數(shù)值=尾數(shù)X底數(shù)“指數(shù),(附加正負(fù)號(hào))F.2于是,float的指數(shù)范圍為-127~128,而double的指數(shù)范圍為-1023~1024,并且指數(shù)位是按補(bǔ)碼的形式來劃分的。其中負(fù)指數(shù)決定了浮點(diǎn)數(shù)所能表達(dá)的絕對(duì)值最小的數(shù);而正指數(shù)決定了浮點(diǎn)數(shù)所能表達(dá)的絕對(duì)值最大的數(shù),也即決定了浮點(diǎn)數(shù)的取值范圍。float的范圍為-2"128~+2"128,也即-3.40E+38~+3.40E+38;double的范圍為-2"1024~+2"1024,也即-1.79E+308~+1.79E+308。2精度float和double的精度是由尾數(shù)的位數(shù)來決定的。浮點(diǎn)數(shù)在內(nèi)存中是按科學(xué)計(jì)數(shù)法來存儲(chǔ)的,其整數(shù)部分始終是一個(gè)隱含著的“1”,由于它是不變的,故不能對(duì)精度造成影響。float:2”23=8388608,一共七位,這意味著最多能有7位有效數(shù)字,但絕對(duì)能保證的為6位,也即float的精度為6~7位有效數(shù)字;double:2"52=4503599627370496,一共16位,同理,double的精度為15~16位。單精度類型(float)和雙精度類型(double)存儲(chǔ)C語言和C#語言中,對(duì)于浮點(diǎn)類型的數(shù)據(jù)采用單精度類型(float)和雙精度類型(double)來存儲(chǔ),float數(shù)據(jù)占用32bit,double數(shù)據(jù)占用64bit,我們在聲明一個(gè)變量floatf=2.25f的時(shí)候,是如何分配內(nèi)存的呢?如果胡亂分配,那世界豈不是亂套了么,其實(shí)不論是float還是double在存儲(chǔ)方式上都是遵從IEEE的規(guī)范的,float遵從的是IEEER32.24,而double遵從的是R64.53。無論是單精度還是雙精度在存儲(chǔ)中都分為三個(gè)部分:符號(hào)位(Sign):0代表正,1代表為負(fù)指數(shù)位(Exponent):用于存儲(chǔ)科學(xué)計(jì)數(shù)法中的指數(shù)數(shù)據(jù),并且采用移位存儲(chǔ)尾數(shù)部分(Mantissa):尾數(shù)部分其中float的存儲(chǔ)方式如下圖所示:而雙精度的存儲(chǔ)方式為:R32.24和R64.53的存儲(chǔ)方式都是用科學(xué)計(jì)數(shù)法來存儲(chǔ)數(shù)據(jù)的,比如8.25用十進(jìn)制的科學(xué)計(jì)數(shù)法表示就為:8.25*上\而120.5可以表示為:1.205*■丁,這些小學(xué)的知識(shí)就不用多說了吧。而我們傻蛋計(jì)算機(jī)根本不認(rèn)識(shí)十進(jìn)制的數(shù)據(jù),他只認(rèn)識(shí)0,1,所以在計(jì)算機(jī)存儲(chǔ)中,首先要將上面的數(shù)更改為二進(jìn)制的科學(xué)計(jì)數(shù)法表示,8.25用二進(jìn)制表示可表示為1000.01,我靠,不會(huì)連這都不會(huì)轉(zhuǎn)換吧?那我估計(jì)要沒轍了。120.5用二進(jìn)制表示為:1110110.1用二進(jìn)制的科學(xué)計(jì)數(shù)法表示1000.01可以表示為1.0001*二1110110.1可以表示為1.1101101*=,任何一個(gè)數(shù)都的科學(xué)計(jì)數(shù)法表示都為1.xxx*:,尾數(shù)部分就可以表示為xxxx,第一位都是1嘛,干嘛還要表示呀?可以將小數(shù)點(diǎn)前面的1省略,所以23bit的尾數(shù)部分,可以表示的精度卻變成了24bit,道理就是在這里,那24bit能精確到小數(shù)點(diǎn)后幾位呢,我們知道9的二進(jìn)制表示為1001,所以4bit能精確十進(jìn)制中的1位小數(shù)點(diǎn),24bit就能使float能精確到小數(shù)點(diǎn)后6位,而對(duì)于指數(shù)部分,因?yàn)橹笖?shù)可正可負(fù),8位的指數(shù)位能表示的指數(shù)范圍就應(yīng)該為:-127-128了,所以指數(shù)部分的存儲(chǔ)采用移位存儲(chǔ),存儲(chǔ)的數(shù)據(jù)為元數(shù)據(jù)+127,下面就看看8.25和120.5在內(nèi)存中真正的存儲(chǔ)方式。
首先看下8.25,用二進(jìn)制的科學(xué)計(jì)數(shù)法表示為:1.0001*-按照上面的存儲(chǔ)方式,符號(hào)位為:0,表示為正,指數(shù)位為:3+127=130,位數(shù)部分為,故8.25的存儲(chǔ)方式如下圖所示:而單精度浮點(diǎn)數(shù)120.5的存儲(chǔ)方式如下圖所示:那么如果給出內(nèi)存中一段數(shù)據(jù),并且告訴你是單精度存儲(chǔ)的話,你如何知道該數(shù)據(jù)的十進(jìn)制數(shù)值呢?其實(shí)就是對(duì)上面的反推過程,比如給出如下內(nèi)存數(shù)據(jù):0100001011101101000000000000,首先我們現(xiàn)將該數(shù)據(jù)分段,010000010111011010000000000000000,在內(nèi)存中的存儲(chǔ)就為下圖所示:根據(jù)我們的計(jì)算方式,可以計(jì)算出,這樣一組數(shù)據(jù)表示為:1.1101101*丁=120.5而雙精度浮點(diǎn)數(shù)的存儲(chǔ)和單精度的存儲(chǔ)大同小異,不同的是指數(shù)部分和尾數(shù)部分的位數(shù)。所以這里不再詳細(xì)的介紹雙精度的存儲(chǔ)方式了,只將120.5的最后存儲(chǔ)方式圖給出,大家可以仔細(xì)想想為何是這樣子的Un0000cnninoiunooooooooodooqdodoqooooooaanooan【下面我就這個(gè)基礎(chǔ)知識(shí)點(diǎn)來解決一個(gè)我們的一個(gè)疑惑,請看下面一段程序,注意觀察輸出結(jié)果floatf=2.2f;doubled=(double)f;Console.WriteLine(d.ToString(〃0.0000000000000〃));f=2.25f;d=(double)f;Console.WriteLine(d.ToString(〃0.0000000000000〃));可能輸出的結(jié)果讓大家疑惑不解,單精度的2.2轉(zhuǎn)換為雙精度后,精確到小數(shù)點(diǎn)后13位后變?yōu)榱?.2000000476837,而單精度的2.25轉(zhuǎn)換為雙精度后,變?yōu)榱?.2500000000000,為何2.2在轉(zhuǎn)換后的數(shù)值更改了而2.25卻沒有更改呢?很奇怪吧?其實(shí)通過上面關(guān)于兩種存儲(chǔ)結(jié)果的介紹,我們已經(jīng)大概能找到答案。首先我們看看2.25的單精度存儲(chǔ)方式,很簡單01000000100100000000000000000000,而2.25的雙精度表示為:0100000000010010000000000000000000000000000000000000000000000000,這樣2.25在進(jìn)行強(qiáng)制轉(zhuǎn)換的時(shí)候,數(shù)值是不會(huì)變的,而我們再看看2.2呢,2.2用科學(xué)計(jì)數(shù)法表示應(yīng)該為:將十進(jìn)制的小數(shù)轉(zhuǎn)換為二進(jìn)制的小數(shù)的方法為將小數(shù)*2,取整數(shù)部分,所以0.282=0.4,所以二進(jìn)制小數(shù)第一位為0.4的整數(shù)部分0,0.4X2=0.8,第二位為0,0.8*2=1.6,第三位為1,0.6X2=1.2,第四位為1,0.2*2=0.4,第五位為0,這樣永遠(yuǎn)也不可能乘到二1.0,得到的二進(jìn)制是一個(gè)無限循環(huán)的排列00110011001100110011...,對(duì)于單精度數(shù)據(jù)來說,尾數(shù)只能表示24bit的精度,所以2.2的float存儲(chǔ)為:但是這樣存儲(chǔ)方式,換算成十進(jìn)制
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化轉(zhuǎn)型培訓(xùn)課件
- 長春嬰兒出行安全須知
- 蘇州房地產(chǎn)市場樓市報(bào)
- 蘇教版二年級(jí)數(shù)學(xué)下冊長度單位換算
- 物業(yè)公司5s培訓(xùn)課件
- 診斷學(xué)概論:胸部 X 線特點(diǎn)課件
- 醫(yī)學(xué)導(dǎo)論:老年醫(yī)學(xué)核心知識(shí)課件
- 敗血癥患者護(hù)理質(zhì)量評(píng)價(jià)
- 生理學(xué)核心概念:情緒生理基礎(chǔ)課件
- 重汽卡車競品培訓(xùn)課件
- 2026國家國防科技工業(yè)局所屬事業(yè)單位第一批招聘62人筆試參考題庫及答案解析
- 2026年寒假作業(yè)實(shí)施方案(第二版修訂):騏驥馳騁勢不可擋【課件】
- 常用實(shí)驗(yàn)室檢查血常規(guī)演示文稿
- 生命第一:員工安全意識(shí)手冊
- cimatron紫藤教程系列g(shù)pp2運(yùn)行邏輯及block說明
- GB/T 32473-2016凝結(jié)水精處理用離子交換樹脂
- CB/T 1233-1994水面艦船螺旋槳脈動(dòng)壓力測量規(guī)程
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)
- 《水利水電工程等級(jí)劃分及洪水標(biāo)準(zhǔn)》 SL252-2000
- 中小學(xué)班主任工作經(jīng)驗(yàn)交流ppt
- 爾雅陶瓷答案
評(píng)論
0/150
提交評(píng)論