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

資訊專欄INFORMATION COLUMN

在python中如何比較兩個float類型的數(shù)據(jù)是否相等

galois / 1094人閱讀

奇怪的現(xiàn)象

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

>>> 0.1+0.2
0.30000000000000004
為什么會出現(xiàn)如此傻的結(jié)果呢?

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

在十進制中也會存在這樣的問題,數(shù)字不能準確地表示像1/3這樣的數(shù)字,所以你必須舍入到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方法,傳入需要比較的兩個數(shù)和可以接受的精度差值即可。

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44896.html

相關(guān)文章

  • Python 基礎篇 - 簡單數(shù)據(jù)處理I

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

    msup 評論0 收藏0
  • 3. Python分支判斷、循環(huán)

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

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

    摘要:個數(shù)相等,順序?qū)斣诤瘮?shù)參數(shù)里面使用的時候,可以在實參里面修改默認值在調(diào)用函數(shù)傳入?yún)?shù)的時候,明確告訴實參,形參給傳的是那個實參的值, 變量 python3中變量的定義是不固定類型的(動態(tài)),區(qū)分大小寫 值類型 引用類型 不可變的(值類型) 可變的(引用類型) int (整型) list (列表) str (字符串) set (集合) tuple (元組) di...

    sugarmo 評論0 收藏0
  • 黑教小本本---python 基礎數(shù)據(jù)類型相關(guān)整理

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

    CodeSheep 評論0 收藏0
  • Python_基礎

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

    mindwind 評論0 收藏0

發(fā)表評論

0條評論

galois

|高級講師

TA的文章

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