日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問題

瀏覽:147日期:2022-06-24 17:03:25

大家好,老 Amy 來了。之前就意識(shí)到一個(gè)問題,但是最近又有朋友提出來了,所以就想著干脆記錄下來,分享給大家叭~

啥問題呢?請(qǐng)看題:

聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問題

也就是說,需要大家計(jì)算1.1-1的值,很多朋友會(huì)說:“emmm…這還不簡(jiǎn)單,玩我呢?不就是0.1嘛”

但是如果你用 python 去執(zhí)行一下,會(huì)發(fā)現(xiàn)結(jié)果跟你想的不太一樣,如下圖:

聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問題

這樣大家是不是發(fā)現(xiàn)了什么問題?是的,浮點(diǎn)數(shù)在運(yùn)算過程中并沒有保證完全精確,是什么原因?qū)е铝诉@種現(xiàn)象呢?很多朋友就會(huì)竊喜:“這不就是 Python 的 bug 嘛~”

但實(shí)際上,這并不是 Python 中的 bug ,它和計(jì)算機(jī)硬件中如何處理浮點(diǎn)數(shù)有關(guān)。浮點(diǎn)數(shù)在計(jì)算機(jī)硬件中以二進(jìn)制的形式存在,但是我們現(xiàn)在看到的都是十進(jìn)制,而十進(jìn)制的浮點(diǎn)數(shù)不能都完全精確的表示為二進(jìn)制小數(shù)。

就比如說我們?cè)谑M(jìn)制數(shù)中無法用小數(shù)精確表示 1/3 一樣,在二進(jìn)制數(shù)中也無法用小數(shù)精確表示 1/10。顯然這樣子的說明并沒有十進(jìn)制中的 1/3 那么直觀,接下來我們嘗試去計(jì)算一下二進(jìn)制中的 1/10 :

十進(jìn)制的整數(shù)位是二進(jìn)制的整數(shù)位,十進(jìn)制的小數(shù)位是二進(jìn)制數(shù)的小數(shù)位。那現(xiàn)在我們拿到0.1

整數(shù)部分為0

小數(shù)部分為0.1,并順序取值

0.1*2=0.2<1取00.2*2=0.4<1取00.4*2=0.8<1取00.8*2=1.6>1取10.6*2=1.2>1取10.2*2=0.4<1取0…

有沒有發(fā)現(xiàn)?在二進(jìn)制下,1/10 是一個(gè)無限循環(huán)小數(shù):0.00011001100110011…,顯然這樣的表示形式無法精確的表示浮點(diǎn)數(shù),最終的結(jié)果是近似 1/10 。在使用 IEEE-754 浮點(diǎn)運(yùn)算標(biāo)準(zhǔn)的計(jì)算機(jī)硬件上,Python 的浮點(diǎn)數(shù)映射為 IEEE-754 雙精度浮點(diǎn)數(shù),共包含 53 位精度(這里指的是二進(jìn)制),在這個(gè)范圍下,這個(gè)最接近 1/10 的結(jié)果是:

3602879701896397/2∗∗55

這表示在計(jì)算機(jī)硬件中,1/10 的真實(shí)十進(jìn)制數(shù)值為:

0.1000000000000000055511151231257827021181583404541015625

那如何進(jìn)行精確的浮點(diǎn)數(shù)運(yùn)算呢?有朋友提出四舍五入可以解決。那我們來仔細(xì)看一下四舍五入真的可以解決這個(gè)問題嗎?

四舍五入進(jìn)行解決

在 python 中,使用 round(number[, ndigits]) 來進(jìn)行四舍五入,其中 ndigits 表示保留幾位小數(shù),默認(rèn)為0。

我們來看代碼如下:

In [10]: round(0.6)Out[10]: 1In [11]: round(0.65,1)Out[11]: 0.7In [12]: round(0.64,1)Out[12]: 0.6

上面代碼符合我們四舍五入的預(yù)期結(jié)果,但是不要著急,我們接著往下看:

In [13]: round(1.15,1)Out[13]: 1.1In [14]: round(0.5)Out[14]: 0In [15]: round(1.5)Out[15]: 2

這樣看是不是有些問題,什么問題呢?按照四舍五入的話,round(1.15)會(huì)直接進(jìn)為1.2,但是此時(shí)并沒有,而是變?yōu)榱?.1。這是為什么呢?

如果沒有上面對(duì)浮點(diǎn)數(shù)的了解,僅從表象上很難去解釋。我們已經(jīng)知道了在計(jì)算機(jī)內(nèi)部,對(duì)于一些浮點(diǎn)數(shù)是無法精確表示的,比如上面代碼中 1.15,我們可以通過 format() 來看看它在計(jì)算機(jī)內(nèi)部更加具體的數(shù)值:

In [16]: format(1.15,'.51f')Out[16]: ’1.149999999999999911182158029987476766109466552734375’

看到這個(gè)結(jié)果,我們就恍然大悟,為什么看到的結(jié)果會(huì)是1.1了。

但是接下來,可能會(huì)更加的困惑,因?yàn)閷?duì)于 0.5 來說,是完全可以直接轉(zhuǎn)為二進(jìn)制表示的。但是round(0.5)結(jié)果卻為0?這是因?yàn)?round() 的工作原理為:對(duì)于 round(number[, ndigits]),如果 number 可以被正常處理,則它的值會(huì)被舍入到最接近的 10 的負(fù) ndigits 次冪的倍數(shù)上,對(duì)于與兩個(gè)倍數(shù)的差值(差值的絕對(duì)值)均相等的情況,則會(huì)選擇兩個(gè)倍數(shù)中的偶數(shù)。

# 最接近的10的負(fù)0次冪的倍數(shù)為0、1,并與0、1差值的絕對(duì)值相同,選擇偶數(shù)0>>> round(0.5) 0# 最接近的10的負(fù)2次冪的倍數(shù)為0.12、0.13,并與0.12、0.13的差值的絕對(duì)值相同,選擇偶數(shù)0.12>>> round(0.125, 2) 0.12# 最接近的10的負(fù)2次冪的倍數(shù)為0.13>>> round(0.12548828125, 2) 0.13

這個(gè)規(guī)則,用我們熟悉的話來說即為“ 四舍六入五成雙 ”。

使用decimal進(jìn)行浮點(diǎn)數(shù)的精確計(jì)算

那我們?cè)?Python 中怎么進(jìn)行精確的浮點(diǎn)數(shù)計(jì)算呢,Python 標(biāo)準(zhǔn)庫為我們提供了decimal 這個(gè)模塊來解決這個(gè)問題,decimal 常用于需要精確處理浮點(diǎn)數(shù)的場(chǎng)合,比如銀行賬戶金額、貨幣加減等。

In [17]: from decimal import DecimalIn [18]: 0.1-0.09Out[18]: 0.010000000000000009In [19]: Decimal(’0.1’)-Decimal(’0.09’)Out[19]: Decimal(’0.01’)

同樣,我們可以使用它來查看對(duì)于不能精確表示的浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部的具體數(shù)值:

In [20]: Decimal.from_float(1.1)Out[20]: Decimal(’1.100000000000000088817841970012523233890533447265625’)In [21]: Decimal.from_float(0.1)Out[21]: Decimal(’0.1000000000000000055511151231257827021181583404541015625’)

這樣就可以解決我們的困惑與問題啦~

補(bǔ)充:python做浮點(diǎn)數(shù)運(yùn)算時(shí)的坑記錄

聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問題

聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問題

很顯然,這個(gè)計(jì)算結(jié)果是不對(duì)的,而且偏離實(shí)際值十分遠(yuǎn)。。。。。。。。

太坑人了這。

本來想自動(dòng)截取計(jì)算得到的圖片尺寸,但是這計(jì)算結(jié)果,坑害了半天的查找錯(cuò)誤過程?。。?!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久不见久久见中文字幕免费| 日韩精品午夜| 一区免费在线| 国产精品色网| 波多野结衣一区| 模特精品在线| 中文字幕av一区二区三区四区| 蜜桃久久久久久久| 欧美日韩夜夜| 中文在线а√在线8| 在线一区视频观看| 免费观看久久av| 亚洲精品九九| 精品亚洲成人| 欧美日韩第一| 日韩中文字幕| 久久一区精品| 精品一区三区| 日韩精品成人| 国产日产精品_国产精品毛片 | 激情综合网五月| 亚洲欧美网站| 国产美女精品视频免费播放软件| 美女性感视频久久| 四虎4545www国产精品 | 欧美激情aⅴ一区二区三区 | 久久亚洲专区| 亚洲无线观看| 国产欧美日韩在线一区二区 | 亚洲精品小说| 91精品丝袜国产高跟在线| 欧美aaaaaa午夜精品| 成人三级高清视频在线看| 精品1区2区3区4区| 国产精品三级| 99久久婷婷这里只有精品| 一区二区电影在线观看| 麻豆91精品视频| 蜜臀91精品国产高清在线观看| 青草久久视频| 欧美成人午夜| 欧美黄色一区| 亚洲一区二区三区四区电影 | 亚洲在线网站| 国产精品亚洲欧美一级在线| 波多野结衣久久精品| 三级一区在线视频先锋| 麻豆国产欧美日韩综合精品二区| av亚洲免费| 欧美激情麻豆| 亚洲综合专区| 91精品国产成人观看| 国产欧美丝祙| 亚洲欧美网站| 日韩电影免费网址| **爰片久久毛片| 国内自拍视频一区二区三区| 亚洲精选av| 激情丁香综合| 久久99免费视频| 蜜桃免费网站一区二区三区| 国产精品字幕| 97精品国产| 国产精品一区二区精品视频观看 | 国产欧美日韩精品一区二区三区| 国产一区亚洲| 日韩成人a**站| 国产乱子精品一区二区在线观看 | 神马久久午夜| 国产精品qvod| 91精品视频一区二区| 免费成人av在线播放| 亚洲二区视频| 视频二区不卡| 久久电影tv| 久久久久黄色| 国产日韩免费| 久久精品99国产精品日本| 亚洲狼人精品一区二区三区| 在线亚洲免费| 黄色成人精品网站| 久久精品成人| 欧美日韩精品免费观看视完整| 精品美女久久| 麻豆国产精品一区二区三区| 日本天堂一区| 日韩精品1区2区3区| 首页欧美精品中文字幕| 日韩一级不卡| 亚洲一区激情| 亚洲一区日韩| 亚洲一区免费| 久久亚洲图片| 免费在线视频一区| 99综合视频| 91久久午夜| 久久高清精品| 在线日韩一区| 亚洲欧洲日本mm| 性色一区二区| 亚洲精品动态| 日韩毛片一区| 国产精品一线天粉嫩av| 国产欧美日韩影院| 麻豆一区二区三区| 日韩精品首页| 欧美午夜不卡影院在线观看完整版免费| 国产精品三上| 久久久人人人| 91精品国产自产在线丝袜啪| 精品一区二区三区中文字幕在线| 精品一区毛片| 精精国产xxxx视频在线播放| 欧美sss在线视频| 麻豆91精品| 在线天堂中文资源最新版| 亚洲经典在线| 国产精品蜜月aⅴ在线| 日韩一区精品字幕| 麻豆理论在线观看| а√天堂8资源在线| 国产亚洲欧美日韩在线观看一区二区| 日韩高清欧美| 欧美激情视频一区二区三区免费| 日日夜夜免费精品| 国产亚洲午夜| 999久久久国产精品| 久久一级电影| 国产精品婷婷| 国产精品成人一区二区不卡| av日韩中文| 日韩精品一二三四| 最新国产精品久久久| 一级欧美视频| 国产美女撒尿一区二区| 日本美女一区| 免费看欧美美女黄的网站| 日韩avvvv在线播放| 日韩a一区二区| 免费在线观看日韩欧美| 国产精品欧美三级在线观看| 精品理论电影在线| 亚洲福利免费| 欧美亚洲三级| 久久激情中文| 欧美日本精品| 亚洲手机视频| 欧美国产不卡| 日韩亚洲精品在线| 麻豆成人91精品二区三区| japanese国产精品| 国产福利亚洲| 国产手机视频一区二区| 精品伊人久久久| 热久久国产精品| www成人在线视频| 欧美久久久网站| 午夜av一区| 久久久久久色| 欧洲av一区二区| 国产精品密蕾丝视频下载| 99热精品在线观看| 国产成人精选| 日本精品在线播放| 国产综合欧美| 麻豆久久一区| 亚洲香蕉视频| 久久中文字幕av| 欧美激情福利| 日本少妇一区二区| 亚洲综合丁香| 亚洲风情在线资源| 亚洲精品伦理| 亚洲天堂黄色| 国产精品久久久久久久久久10秀 | 美女视频网站久久| 一区二区电影| 视频一区中文| 91一区二区| 国产亚洲精品美女久久| 日韩视频二区| 高清日韩欧美| 日本欧美大码aⅴ在线播放| 五月天综合网站| 成人va天堂| 国产成人精选| 国产成人免费| 老司机免费视频一区二区三区| 日韩精选在线| 亚洲精品伊人| 蜜臀久久久99精品久久久久久| 国产综合婷婷| 1000部精品久久久久久久久| 国产传媒在线| 精品伊人久久久| 国产精品久久久久久av公交车| 免费看黄色91| 亚洲一区黄色| 99国产精品私拍| 在线亚洲欧美|