Python的==是一个等价关系的浮点数?
在本地Python中,没有使用NumPy(对于哪个numpy.nan != numpy.nan
)没有NaN,所以我正确地认为Python的浮点==
是反身的? 那么既然它是对称的( a == b
意味着b == a
)和传递的(如果a==b
和b==c
那么a==c
),我们可以说Python的==
是float
上的等价关系S'
编辑:好吧,所以我知道有一个NaN: float('nan')
(谢谢@unutbu)这将通过各种操作传播,但是没有我介绍它的任何本地Python方法返回它(而不是引发一个例外)通过这个任务?
==
是所有数字的reflection,零,零,无穷和无穷,但不是南。
你可以通过文字上的算术运算得到inf
, -inf
和nan
在本地Python中,就像下面这样。
这些行为是正确的,如在IEEE 754和没有math领域例外:
>>> 1e1000 == 1e1000 True >>> 1e1000/1e1000 == 1e1000/1e1000 False
1e1000
是一个非常大的数字,所以float和double表示为无穷大。
- 无限等于无穷
- 无穷大除以无穷大并不是一个数字
- 不是数字!=不是数字
Python中的浮点运算也适用于无穷大无穷大等。
>>> x = 1e1000 >>> x inf >>> x+x inf >>> xx nan >>> x*2 inf >>> x == x True >>> xx == xx 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