xnx*_*xnx 35 python floating-point arithmetic-expressions
在原生Python中,没有使用NumPy(为此numpy.nan != numpy.nan
)没有NaN,所以我认为Python的浮点==
是反身的吗?那么既然它是对称的(a == b
暗示的b == a
)和传递的(if a==b
和b==c
then a==c
),我们可以说Python ==
是float
s 上的等价关系吗?
编辑:好的,让我了解到,有是一个楠:float('nan')
(感谢@unutbu)将通过各种操作传播,但任何原生的Python方法返回它(而不是抛出一个异常),如果没有我在这项任务中引入了吗?
use*_*016 46
==
对于所有数字,零,零,无穷大和无穷大都是反身的,但不适用于南方.
您可以通过对文字的算术运算来获取inf
,-inf
和nan
本机Python,如下所示.
这些行为正确,如IEEE 754和没有数学域异常:
>>> 1e1000 == 1e1000
True
>>> 1e1000/1e1000 == 1e1000/1e1000
False
Run Code Online (Sandbox Code Playgroud)
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
>>>
Run Code Online (Sandbox Code Playgroud)
对于零和零的情况:
>>> inf = float("inf")
>>> 1/inf
0.0
>>> -1/inf
-0.0
>>> -1/inf == 1/inf
True
>>>
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 34
float('nan')
存在于本机Python和float('nan') != float('nan')
.所以不,==
不是等价关系,因为它缺乏反身性:
In [40]: float('nan') == float('nan')
Out[40]: False
Run Code Online (Sandbox Code Playgroud)