Agu*_*guy 12 python floating-point nan ieee-754
我很惊讶
>>> import math
>>> 1**math.nan
1.0
Run Code Online (Sandbox Code Playgroud)
虽然我们也是这样,但也是如此
>>> 0j**math.nan
0j
Run Code Online (Sandbox Code Playgroud)
我没有找到任何其他例子.是否有一个我错过的理由或逻辑使得这个选择成为正确的选择?或者这是一个滑倒?
我在期待nan
.至于除了1
或之外的其他所有数字0j
.
编辑1:感谢jedwards的评论,我有一个参考.但我仍然不明白为什么.为什么这个决定作为标准?另外,找不到参考0j**mat.nan
......
编辑2:所以按照下面的答案和其他一些东西,逻辑可能是这样的:任何涉及的计算都nan
应该返回,nan
除非计算总是返回相同的答案而不管参数.在这种情况下,我们nan
作为论据的事实不应该影响结果,我们仍然应该得到固定的答案.
这当然解释1**math.nan
和math.nan**0
.这也解释了为什么0**math.nan
给nan
,而不是0
(因为0**n
是0
为所有,但,当n=0
它与结果1
),并可能被展宽到为什么math.nan*0
是nan
如果我们同意该说法不一定是有限的.
但如果这是现场背后的逻辑,那么0j**math.nan
应该是nan
,因为0j**n
是0
对所有n
除的n=0
地方0j**0
是1
.所以...确实0j**math.nan
有不同的推理?或者是实施中的问题?
2008版IEEE 754标准规定,pow(1,qNaN)和pow(qNaN,0)都应该返回1,因为它们返回1,而不是使用其他任何用于安静的NaN.
有关详细信息,请参阅IEEE 754 2008的第56页:
对于任何x(即使是零,安静的NaN或无穷大),pow(x,±0)为1
pow(±0,y)是±∞,并且y为奇数,表示divideByZero异常
因此,推理似乎是无论指数中的数字k是多少1^k = 1
,1^Nan
也应该是1.为什么推理是合理的(我确定它是)我需要进一步挖掘.
就个人而言,我认为这是有道理的 - Nan
在数学中并不存在,只是我们的浮点表示无法处理它(或者,Nan是"计算太多,这是一些数字但不确定哪个") .因此,1^Nan
可以是1到任意幂(不是1到非数字的东西),但由于答案总是1,所以只有在我们定义1^Nan
为1时它才有用.
归档时间: |
|
查看次数: |
329 次 |
最近记录: |