国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在python中如何比較兩個float類型的數據是否相等

galois / 1102人閱讀

奇怪的現象

前幾天跟同事聊起來,在計算機內部float比較是很坑爹的事情。比方說,0.1+0.2得到的結果竟然不是0.3?

>>> 0.1+0.2
0.30000000000000004
為什么會出現如此傻的結果呢?

這篇文章做了詳細的解釋,簡單的來說就是計算機里面的數字是由二進制保存的,在計算機內部有些數字不能準確的保存,于是就保存一個最靠近的數字。

在十進制中也會存在這樣的問題,數字不能準確地表示像1/3這樣的數字,所以你必須舍入到0.33之類的東西 - 你不要指望0.33 + 0.33 + 0.33加起來就是1。

因此我們在比較兩個float是否相等時,不能僅僅依靠 == 來進行判斷,而是當他們兩者的差小于一個我們可以容忍的小值時,就可以認為他們就是相等的。

Python中是如何解決的?

各種語言中都有類似的處理方式,python中是這樣處理的?
StackOverFlow有類似的問題: what-is-the-best-way-to-compare-floats-for-almost-equality-in-python

簡單粗暴的判斷方法
return abs(f1 - f2) <= allowed_error

python3.5之后,PEP485提案中已給出了解決方案。
使用math.isclose方法,傳入需要比較的兩個數和可以接受的精度差值即可。

PEP 485: A function for testing approximate equality
PEP 485 adds the math.isclose() and cmath.isclose() functions which tell whether two values are approximately equal or “close” to each other. Whether or not two values are considered close is determined according to given absolute and relative tolerances. Relative tolerance is the maximum allowed difference between isclose arguments, relative to the larger absolute value:
math.isclose 使用方法
>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, rel_tol=1e-5)
True
>>> math.isclose(a, b, rel_tol=1e-6)
False
It is also possible to compare two values using absolute tolerance,
 which must be a non-negative value:

>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, abs_tol=0.00003)
True
>>> math.isclose(a, b, abs_tol=0.00001)
False

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44896.html

相關文章

  • Python 基礎篇 - 簡單數據處理I

    摘要:獲取怎樣的數據在這里首先需要考慮,我們的四則運算計算器的計算復雜度是如何的是僅能計算兩個數值的簡單運算,如還是能進行混合四則運算,如那么你想處理運算的復雜程度就決定了你想獲取怎樣的數據,這是很實際的問題。 引言 在上一篇文章的介紹中,我們提及了Python的三種基本數據類型,如文章末尾所說,Python中的內建數據類型并不僅僅是這幾種,但其實我從接觸Python到現在,往往就是這幾種簡...

    msup 評論0 收藏0
  • 3. Python分支判斷、循環

    摘要:例如這顯然是不對的,所以式子的值是是變量名邏輯操作如果是則結果為,反之同理同時為時,結果為至少一個為,結果為在布爾值之間進行運算,之前說數據類型的時候也說過。我們說了例如這樣的比較的式子的值是布爾值,也就是說可以將式子進行邏輯運算。 本文利用的是Python 3.x版本,建議學習3.x版本 Python中的分支判斷、循環 1. 分支條件判斷 1.1 比較操作 以下是數之間常見的比較操作...

    BicycleWarrior 評論0 收藏0
  • python3入門與進階(二)

    摘要:個數相等,順序對應當在函數參數里面使用的時候,可以在實參里面修改默認值在調用函數傳入參數的時候,明確告訴實參,形參給傳的是那個實參的值, 變量 python3中變量的定義是不固定類型的(動態),區分大小寫 值類型 引用類型 不可變的(值類型) 可變的(引用類型) int (整型) list (列表) str (字符串) set (集合) tuple (元組) di...

    sugarmo 評論0 收藏0
  • 黑教小本本---python 基礎數據類型相關整理

    摘要:基礎數據類型版本分為余版本,目前同時發行。對中文支持較差,如果要在程序中使用中文字符或中文變量,則需要在源程序的第一行增加,當然別忘了將源文件保存為字符集。運算符左右兩邊都是布爾值,輸出結果也為 python 基礎數據類型 python版本分為2.0余3.0版本,目前同時發行。以后3.0版本將成為主流地址https://www.python.org/ 編輯器 自帶編輯器IDLE【可...

    CodeSheep 評論0 收藏0
  • Python_基礎

    摘要:依次寫出函數名括號參數語句結束符。使用和是的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。命名的關鍵字參數作用為了限制調用者可以傳入的參數名,同時可以提供默認值。 Run 源代碼 Python源代碼的文件以py為擴展名,由Python程序解釋,不需要編譯 命令:python 文件 字節代碼 Python源文件經過編譯后生成的擴展名為pyc的文件編譯方法: import py_c...

    mindwind 評論0 收藏0

發表評論

0條評論

galois

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<