簡體   English   中英

Python的==是否等於浮點數的對等關系?

[英]Is Python's == an equivalence relation on the floats?

在本機Python中,如果不使用NumPy(對於numpy.nan != numpy.nan ),則沒有NaN,所以我認為Python的浮點==具有反射性是對的嗎? 然后,由於它是對稱的( a == b意味着b == a )並且是可傳遞的(如果a==bb==ca==c ),我們可以說Python的==float上的等價關系s?

編輯:好的,讓我了解到一個楠: float('nan')感謝@unutbu)將通過各種操作傳播,但是否有任何原生的Python方法返回它(而不是拋出一個異常),而我將其引入通過這項任務?

==對於所有數字(零,-零,ininity和-infinity)是自反的,但對於nan則不自反。

您可以通過對文字進行算術運算來在本地Python中獲得inf-infnan ,如下所示。

它們的行為正確,如在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM