[英]Is Python's == an equivalence relation on the floats?
在本機Python中,如果不使用NumPy(對於numpy.nan != numpy.nan
),則沒有NaN,所以我認為Python的浮點==
具有反射性是對的嗎? 然后,由於它是對稱的( a == b
意味着b == a
)並且是可傳遞的(如果a==b
和b==c
則a==c
),我們可以說Python的==
是float
上的等價關系s?
編輯:好的,讓我了解到有一個楠: float('nan')
感謝@unutbu)將通過各種操作傳播,但是否有任何原生的Python方法返回它(而不是拋出一個異常),而我將其引入通過這項任務?
==
對於所有數字(零,-零,ininity和-infinity)是自反的,但對於nan則不自反。
您可以通過對文字進行算術運算來在本地Python中獲得inf
, -inf
和nan
,如下所示。
它們的行為正確,如在IEEE 754中並且沒有數學域異常:
>>> 1e1000 == 1e1000
True
>>> 1e1000/1e1000 == 1e1000/1e1000
False
1e1000
是一個非常大的數字,因此float和double將其表示為無窮大。
Python中的浮點算術對於無窮負無窮等也可以工作:
>>> x = 1e1000
>>> x
inf
>>> x+x
inf
>>> x-x
nan
>>> x*2
inf
>>> x == x
True
>>> x-x == x-x
False
>>>
對於零和負零的情況:
>>> inf = float("inf")
>>> 1/inf
0.0
>>> -1/inf
-0.0
>>> -1/inf == 1/inf
True
>>>
float('nan')
存在於本機Python中,並且float('nan') != float('nan')
。 所以不, ==
不是等價關系,因為它缺乏自反性:
In [40]: float('nan') == float('nan')
Out[40]: False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.