Python 的 == 是浮点数的等价关系吗?
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?
上的等价关系
编辑:好的,所以我了解到 是 一个 NaN: float('nan')
(感谢@unutbu)它将通过各种操作传播,但是任何原生 Python 方法 return 它(而不是引发异常)而不是我通过这个作业引入它?
float('nan')
存在于本机 Python 和 float('nan') != float('nan')
中。所以不,==
不是 equivalence relation 因为它缺乏自反性:
In [40]: float('nan') == float('nan')
Out[40]: False
==
对所有数字都是自反的,零、-零、无穷大和-无穷大,但不是 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
>>>
在原生 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 方法 return 它(而不是引发异常)而不是我通过这个作业引入它?
float('nan')
存在于本机 Python 和 float('nan') != float('nan')
中。所以不,==
不是 equivalence relation 因为它缺乏自反性:
In [40]: float('nan') == float('nan')
Out[40]: False
==
对所有数字都是自反的,零、-零、无穷大和-无穷大,但不是 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
>>>