摘要:為了表示這兩種狀態(tài),便引入和為了表示更多狀態(tài),便增加和的對(duì)數(shù)。浮點(diǎn)數(shù)存儲(chǔ)方式由于計(jì)算機(jī)不識(shí)別十進(jìn)制,所以十進(jìn)制數(shù)據(jù)都要轉(zhuǎn)換為二進(jìn)制保存。
對(duì)于標(biāo)題疑問,2.25-2.2!=0.05,那正確答案是什么呢?
print(2.25-2.2) //0.04999999999999982
事實(shí)證明,的確不等于0.05.那0.04999999999999982是怎么得來的呢?
Google:因?yàn)檎`差
誤差是怎么產(chǎn)生的,為什么整數(shù)就能精確表示,而浮點(diǎn)數(shù)不能精確表示?
Google:因?yàn)檎麛?shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)的存儲(chǔ)方式不同
那浮點(diǎn)數(shù)跟整數(shù)相比,浮點(diǎn)數(shù)在計(jì)算機(jī)如何存儲(chǔ)的呢?
Google:說來話長(zhǎng)......
1.計(jì)算機(jī)的本質(zhì)
追根究底,計(jì)算機(jī)工作的實(shí)質(zhì)便是電壓的高低切換,像電燈,高電位,電燈亮,低電位,電燈滅。為了表示這兩種狀態(tài),便引入0和1.為了表示更多狀態(tài),便增加0和1的對(duì)數(shù)。32bit和64bit的計(jì)算機(jī)就是這樣來的,代表了計(jì)算機(jī)內(nèi)存存放待處理數(shù)據(jù)的大小。32bit的計(jì)算機(jī)內(nèi)存大概在4G左右,64bit更多。
//32bit 00000000000000000000000000000000-11111111111111111111111111111111
2.浮點(diǎn)數(shù)存儲(chǔ)方式
由于計(jì)算機(jī)不識(shí)別十進(jìn)制,所以十進(jìn)制數(shù)據(jù)都要轉(zhuǎn)換為二進(jìn)制保存。并且是以二進(jìn)制的科學(xué)記數(shù)法進(jìn)行保存
2.25 = 10.01(二進(jìn)制) = 1.001*2^1(二進(jìn)制科學(xué)計(jì)數(shù)法) // 2.25整數(shù)部分轉(zhuǎn)換:2=10(除2取余法) // 小數(shù)部分轉(zhuǎn)換過程:0.25*2 = 0.5 取整數(shù)部分0 (乘2取整法) // 0.5*2 = 1 取整數(shù)部分1 // 故小數(shù)部分0.25 = .01
浮點(diǎn)數(shù)轉(zhuǎn)換為二進(jìn)制科學(xué)計(jì)數(shù)法,由三部分組成符號(hào)位,指數(shù)位,尾數(shù)部分
這三部分在計(jì)算機(jī)中是怎么存儲(chǔ)的呢?
以單精度float為例,float根據(jù)IEEE R32.24標(biāo)準(zhǔn)數(shù)據(jù)占32位,每部分存放規(guī)則如下:
說明:1.對(duì)于符號(hào)位,若值為正,則為0,若值為負(fù),則為1
2.對(duì)于指數(shù)位,由于指數(shù)存在正指數(shù)和負(fù)指數(shù),占一位,其余7位表示值的大小,故范圍為-127~128.指數(shù)位采用移位存儲(chǔ)方式,即元指數(shù)+127(00000000=>-127)~(11111111=>128)
3.對(duì)于尾數(shù)部分,由于第一位恒為1,所以實(shí)際表示并未考慮第一位,所以有效位為24位
那么2.25(即1.001*2^1)在計(jì)算機(jī)中存儲(chǔ)方式為:
0(正) 10000000(1+127) 00100000000000000000000(.001)
2.2呢?
利用十進(jìn)制轉(zhuǎn)二進(jìn)制得:
//2.2小數(shù)本分0.2采用乘2取整法過程: //0.2*2=0.4 0 //0.4*2=0.8 0 //0.8*2=1.6 1 //0.6*2=1.2 1 //0.2*2=0.4 0 //...... //不可能乘2恰好得到1.0 2.2=10.00110011001100110011001100110011001100110011001101...(無限不循環(huán)) =1.00011001100110011001100*2^1(尾數(shù)部分超過23位都被截去了) !=2.2 0(正) 10000000(1+127) 00011001100110011001100
可見,2.2的小數(shù)部分通過乘二取整法,永遠(yuǎn)無法恰好達(dá)到1,所以二進(jìn)制尾數(shù)部分成無限不循環(huán),超過23位的數(shù)據(jù)會(huì)直接被丟棄,導(dǎo)致與原十進(jìn)制數(shù)據(jù)不相等。這也就是誤差產(chǎn)生的根源。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41332.html
入坑 Python自從進(jìn)入公司,到現(xiàn)在也有半年的時(shí)間。這半年的時(shí)間從 python 到入門到開發(fā)了幾個(gè)小項(xiàng)目,類型涵蓋了web應(yīng)用 程序、爬蟲程序 (scrapy),python腳本工具,自動(dòng)化工具。對(duì) python 語言也越來越熟悉,當(dāng)然也有所感悟和總結(jié)。首先 Python 真的讓語言成 了一個(gè)工具,入門代價(jià)很小,上手能夠開發(fā)出小工具,可以更快體驗(yàn)到編程的樂趣。但是做到pythonic需要更多的...
摘要:本文將利用畫多種不同的表白圖,附上源碼,表白代碼看這一篇文章就夠啦,總有你喜歡的,喜歡的話別忘記三連了。 本文將利用Python畫多種不同的表白圖,附上源碼,表白代...
本文關(guān)鍵給大家介紹了python大數(shù)據(jù)可視化制作火山圖實(shí)例詳細(xì)說明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪 導(dǎo)進(jìn)控制模塊 importnumpyasnp importpandasaspd 1.載入測(cè)試報(bào)告 data=pd.read_csv(r'E:ZYHR.projectrna-seqlianxi1exon_leveldf.csv...
Golang 什么時(shí)候使用指針(Pointer)?什么時(shí)候使用值(Value)?對(duì)于go開發(fā)者來說是一件頭疼的事情, 而且這個(gè)問題似乎沒有絕對(duì)的答案,那是否代表我們可以隨意使用呢?答案當(dāng)然是否定的。本文我將試圖總結(jié)什么場(chǎng)景使用指針更合理。 在開始閱讀前,建議讀者先能夠清晰理解 Golang 指針、類型和值等概念。本文并不是標(biāo)準(zhǔn)更不是唯一答案,而是自己根據(jù)使用經(jīng)驗(yàn)和社區(qū)的一些討論而總結(jié)的實(shí)踐有下幾種...
閱讀 962·2019-08-30 15:55
閱讀 556·2019-08-26 13:56
閱讀 2086·2019-08-26 12:23
閱讀 3306·2019-08-26 10:29
閱讀 608·2019-08-26 10:17
閱讀 2874·2019-08-23 16:53
閱讀 705·2019-08-23 15:55
閱讀 2831·2019-08-23 14:25