Python的==是一个等价关系的浮点数?

在本地Python中,没有使用NumPy(对于哪个numpy.nan != numpy.nan )没有NaN,所以我正确地认为Python的浮点==是反身的? 那么既然它是对称的( a == b意味着b == a )和传递的(如果a==bb==c那么a==c ),我们可以说Python的==float上的等价关系S'

编辑:好吧,所以我知道有一个NaN: float('nan') (谢谢@unutbu)这将通过各种操作传播,但是没有我介绍它的任何本地Python方法返回它(而不是引发一个例外)通过这个任务?

==是所有数字的reflection,零,零,无穷和无穷,但不是南。

你可以通过文字上的算术运算得到inf-infnan在本地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