婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 聊聊Python中的浮點數運算不準確問題

聊聊Python中的浮點數運算不準確問題

熱門標簽:長春人工智能電銷機器人官網 西藏快速地圖標注地點 地圖標注推廣單頁 如何在地圖標注文字 廈門crm外呼系統如何 女王谷地圖標注 ai地圖標注 百應ai電銷機器人鄭州 n400電話申請多少錢

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

啥問題呢?請看題:

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

但是如果你用 python 去執行一下,會發現結果跟你想的不太一樣,如下圖:

這樣大家是不是發現了什么問題?是的,浮點數在運算過程中并沒有保證完全精確,是什么原因導致了這種現象呢?很多朋友就會竊喜:“這不就是 Python 的 bug 嘛~”

但實際上,這并不是 Python 中的 bug ,它和計算機硬件中如何處理浮點數有關。浮點數在計算機硬件中以二進制的形式存在,但是我們現在看到的都是十進制,而十進制的浮點數不能都完全精確的表示為二進制小數。

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

十進制的整數位是二進制的整數位,十進制的小數位是二進制數的小數位。那現在我們拿到0.1

整數部分為0

小數部分為0.1,并順序取值

0.1*2=0.21取0
0.2*2=0.41取0
0.4*2=0.81取0
0.8*2=1.6>1取1
0.6*2=1.2>1取1
0.2*2=0.41取0
…

有沒有發現?在二進制下,1/10 是一個無限循環小數:0.00011001100110011…,顯然這樣的表示形式無法精確的表示浮點數,最終的結果是近似 1/10 。在使用 IEEE-754 浮點運算標準的計算機硬件上,Python 的浮點數映射為 IEEE-754 雙精度浮點數,共包含 53 位精度(這里指的是二進制),在這個范圍下,這個最接近 1/10 的結果是:

3602879701896397/2∗∗55

這表示在計算機硬件中,1/10 的真實十進制數值為:

0.1000000000000000055511151231257827021181583404541015625

那如何進行精確的浮點數運算呢?有朋友提出四舍五入可以解決。那我們來仔細看一下四舍五入真的可以解決這個問題嗎?

四舍五入進行解決

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

我們來看代碼如下:

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

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

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

這樣看是不是有些問題,什么問題呢?按照四舍五入的話,round(1.15)會直接進為1.2,但是此時并沒有,而是變為了1.1。這是為什么呢?

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

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

看到這個結果,我們就恍然大悟,為什么看到的結果會是1.1了。

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

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

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

使用decimal進行浮點數的精確計算

那我們在 Python 中怎么進行精確的浮點數計算呢,Python 標準庫為我們提供了decimal 這個模塊來解決這個問題,decimal 常用于需要精確處理浮點數的場合,比如銀行賬戶金額、貨幣加減等。

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

同樣,我們可以使用它來查看對于不能精確表示的浮點數在計算機內部的具體數值:

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

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

補充:python做浮點數運算時的坑記錄

很顯然,這個計算結果是不對的,而且偏離實際值十分遠。。。。。。。。

太坑人了這。

本來想自動截取計算得到的圖片尺寸,但是這計算結果,坑害了半天的查找錯誤過程?。。?!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python如何執行精確的浮點數運算
  • python中實現精確的浮點數運算詳解
  • Python中的浮點數原理與運算分析
  • Python雙精度浮點數運算并分行顯示操作示例

標簽:廊坊 內江 拉薩 綿陽 亳州 黔東 渭南 興安盟

巨人網絡通訊聲明:本文標題《聊聊Python中的浮點數運算不準確問題》,本文關鍵詞  聊聊,Python,中的,浮,點數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《聊聊Python中的浮點數運算不準確問題》相關的同類信息!
  • 本頁收集關于聊聊Python中的浮點數運算不準確問題的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩电影一区二区三区| 99国产精品久久久| 亚洲美女屁股眼交3| 亚洲欧洲色图综合| 亚洲欧洲精品天堂一级| 中文字幕中文在线不卡住| 久久久久久久久久久久久久久99 | 三级精品在线观看| 天天综合色天天| 秋霞成人午夜伦在线观看| 亚洲一区免费视频| 国产精品影视天天线| 国产99久久久精品| 91女厕偷拍女厕偷拍高清| 91成人国产精品| 91精品国产品国语在线不卡| 欧美老年两性高潮| 国产色婷婷亚洲99精品小说| 国产女同互慰高潮91漫画| 91一区二区三区在线观看| 蜜臀久久99精品久久久久久9| 欧美日韩国产天堂| 免费成人在线视频观看| 中文成人av在线| 国产欧美日产一区| 91精品国产91久久综合桃花| 亚洲一区电影777| 亚洲人成人一区二区在线观看| 久久伊99综合婷婷久久伊| 欧美一区午夜精品| 国产精品成人午夜| 在线不卡a资源高清| 国产一区二区三区av电影 | 午夜视频一区二区| 在线观看国产精品网站| 亚洲国产一二三| 国产美女av一区二区三区| 日本一区二区三区免费乱视频| 成人涩涩免费视频| 午夜欧美在线一二页| 国产精品国产馆在线真实露脸| 国产一区二区久久| 中文字幕亚洲区| 欧美一区二区免费观在线| 国产一区二区看久久| 国产日产欧美一区二区视频| 欧美丝袜丝交足nylons图片| 国产精品99久久久久久有的能看| 亚洲欧美日韩精品久久久久| 色94色欧美sute亚洲13| 色伊人久久综合中文字幕| 欧美美女视频在线观看| 麻豆国产91在线播放| 色哟哟国产精品| 久久久美女毛片| 国产欧美综合在线| 欧美视频在线一区二区三区| 91精品国产色综合久久| 久久久亚洲综合| 精品久久久久久久人人人人传媒| 94-欧美-setu| 国产精品免费av| eeuss影院一区二区三区| 豆国产96在线|亚洲| 色综合天天狠狠| 欧美tickle裸体挠脚心vk| 国产视频一区在线观看| 一区二区高清在线| 国产一区二区中文字幕| 成人18视频在线播放| 开心九九激情九九欧美日韩精美视频电影| 久久国产日韩欧美精品| 亚洲一区二区三区中文字幕| 一区二区三区久久| 精品在线免费视频| 一本大道久久a久久精品综合| 色综合中文字幕国产| 精品视频在线免费观看| 久久色在线观看| 天天影视色香欲综合网老头| 极品少妇一区二区三区精品视频| 成人深夜福利app| www成人在线观看| 美日韩一区二区三区| 成人av片在线观看| 精品国产乱码91久久久久久网站| 一区二区三区在线免费视频| 国产电影精品久久禁18| 欧美一区永久视频免费观看| 亚洲最色的网站| 国产高清不卡一区二区| 精品久久久久久久久久久久久久久久久| 中文字幕永久在线不卡| 国产99精品国产| 亚洲欧洲日韩综合一区二区| 国产精华液一区二区三区| 欧美精品一区二区三区高清aⅴ | 欧美在线短视频| www国产精品av| 久久精品国产精品亚洲红杏| 欧美激情在线一区二区三区| 欧美夫妻性生活| 欧洲日韩一区二区三区| 国产成人精品午夜视频免费| 精品精品国产高清一毛片一天堂| av电影在线观看完整版一区二区| 久久99精品久久久久婷婷| 亚洲电影一级黄| 亚洲综合色在线| 亚洲乱码国产乱码精品精可以看| 亚洲国产成人一区二区三区| 日韩一级片网站| 欧美一卡二卡三卡| 欧美成人在线直播| 日韩一区二区三区高清免费看看| 欧美精品乱码久久久久久按摩| 久久久精品2019中文字幕之3| 色综合久久久久久久久| 久久不见久久见免费视频1| 中文字幕永久在线不卡| 2021久久国产精品不只是精品| 国产不卡高清在线观看视频| 亚洲成a人片在线观看中文| 国产精品精品国产色婷婷| 欧美少妇性性性| 91久久免费观看| fc2成人免费人成在线观看播放| 毛片av一区二区| 日韩不卡在线观看日韩不卡视频| 国产精品无遮挡| 精品国产露脸精彩对白| 日韩视频一区二区三区在线播放| 欧美在线一区二区三区| 色婷婷精品大视频在线蜜桃视频| 国产美女一区二区| 日本午夜精品视频在线观看 | 午夜精品福利一区二区三区av| 日韩美女视频一区| 一区二区三区.www| 日本在线不卡视频一二三区| 日韩一区二区影院| 成人h精品动漫一区二区三区| 亚洲妇女屁股眼交7| 欧美色图激情小说| 亚洲欧美在线视频| 欧美日韩黄色一区二区| 免费观看在线综合| 色偷偷88欧美精品久久久| 亚洲大片精品永久免费| 国产午夜精品一区二区三区四区| 丁香桃色午夜亚洲一区二区三区| 亚洲精品视频免费看| 日韩精品一区二区三区视频| 国产精品一区二区男女羞羞无遮挡| 午夜激情综合网| 亚洲精品视频免费看| 777色狠狠一区二区三区| 国产资源在线一区| 成人a免费在线看| 欧美精品欧美精品系列| 国产免费观看久久| 日韩精品91亚洲二区在线观看 | 亚洲一区二区三区精品在线| 精品一区二区三区免费观看| 欧美综合亚洲图片综合区| 精品动漫一区二区三区在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 婷婷久久综合九色综合绿巨人 | 久久国产福利国产秒拍| 97精品国产97久久久久久久久久久久| 91福利区一区二区三区| 精品国产乱码久久久久久久| 亚洲午夜一二三区视频| 色偷偷一区二区三区| 久久久精品综合| 久久精品国产澳门| 欧美精品久久99久久在免费线| 亚洲欧美一区二区在线观看| 韩国毛片一区二区三区| 欧美大白屁股肥臀xxxxxx| 亚洲国产精品一区二区久久| 成+人+亚洲+综合天堂| 欧美激情一区不卡| 99在线精品观看| 亚洲欧美日韩综合aⅴ视频| 99在线热播精品免费| 一区二区三区四区乱视频| 一道本成人在线| 亚洲一级不卡视频| 日韩一区二区免费电影| 国产一区二区久久| 成人欧美一区二区三区1314| 在线日韩av片| 久久成人精品无人区| 国产午夜一区二区三区| 成人性视频免费网站| 艳妇臀荡乳欲伦亚洲一区| 欧美一区二区三区婷婷月色| 韩国av一区二区三区在线观看| 中日韩av电影|