[英]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.