[python基礎] 浮點數乘法的偏差問題

>>> 2.2*3
6.6000000000000005

詳細的原理在IEEE 754浮點數標準python

 

小數以二進制形式表示時的有窮性致使的,spa

這不是Python的問題,而是實數的無限精度跟計算機的有限內存之間的矛盾code

計算機的內存、cpu寄存器等等這些硬件單元都是有限的只能表示有限位數的二進制位,所以存儲的二進制小數就會和實際轉換而成的二進制數有必定的偏差。(你能夠試着將0.3轉化爲二進制表示,也將出現一個循環小數。)blog

實際上,大多數狀況下,小數在計算機中是以一種相似科學計數法的形式表示的,具體的能夠參考一下其餘的資料。但即使如此,仍然存在偏差。內存

因此在python中不建議直接將兩個浮點數進行大小比較,或者作精確的計算,每每會獲得意想不到的結果。

 

關於控制精度的方法能夠使用round和decimal模塊ci

 

使用decimal模塊計算時:io

>>> from decimal import *
>>> Decimal('2.2')*Decimal('3')
Decimal('6.6')

 

相關連接class

https://www.zhihu.com/question/25457573import

相關文章
相關標籤/搜索