1**math.nan 和 0j**math.nan 的惊喜
A surprise with 1**math.nan and 0j**math.nan
我很惊讶
>>> import math
>>> 1**math.nan
1.0
当我们这样做的时候,
>>> 0j**math.nan
0j
我没有找到任何其他示例。是否有我错过的原因或逻辑使它成为正确的选择?或者这是一个失误?
我期待 nan
。至于除 1
或 0j
.
以外的所有其他数字
编辑 1: 感谢 jedwards 在下面的评论,我有一个参考。但我还是不明白为什么。为什么将其定为标准?此外,找不到对 0j**mat.nan
...
的引用
编辑 2: 所以按照下面的答案和其他一些东西,逻辑可能是这样的:任何涉及 nan
的计算都应该 return nan
除非无论参数如何,计算总是 return 得到相同的答案。在这种情况下,我们将 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
对所有 n
都是 0
' s 除了 n=0
,其中 0j**0
是 1
。那么... 0j**math.nan
有不同的推理吗?还是执行有问题?
引用此 question which in turns quotes IEEE 754 (see Wikipedia),
The 2008 version of the IEEE 754 standard says that pow(1,qNaN) and pow(qNaN,0) should both return 1 since they return 1 whatever else is used instead of quiet NaN.
有关详细信息,请参阅 IEEE 754 2008 的第 56 页:
pow(x, ±0) is 1 for any x (even a zero, quiet NaN, or infinity)
pow(±0, y) is ±∞ and signals the divideByZero exception for y an odd
因此,推理似乎是无论k在指数中是什么数,1^k = 1
,1^Nan
也应该是1。为什么这个推理是合理的(我敢肯定是)我需要进一步挖掘。
我个人认为这是有道理的 - Nan
在数学中并不存在,只是我们的浮点表示无法处理它(或者,Nan 是“计算量太大,这是一些数字,但不确定是哪个”)。因此,1^Nan
可以是 1 的任意次幂(不是 1 的非数字),但由于答案始终为 1,因此只有将 1^Nan
定义为 1 才有用.
我很惊讶
>>> import math
>>> 1**math.nan
1.0
当我们这样做的时候,
>>> 0j**math.nan
0j
我没有找到任何其他示例。是否有我错过的原因或逻辑使它成为正确的选择?或者这是一个失误?
我期待 nan
。至于除 1
或 0j
.
编辑 1: 感谢 jedwards 在下面的评论,我有一个参考。但我还是不明白为什么。为什么将其定为标准?此外,找不到对 0j**mat.nan
...
编辑 2: 所以按照下面的答案和其他一些东西,逻辑可能是这样的:任何涉及 nan
的计算都应该 return nan
除非无论参数如何,计算总是 return 得到相同的答案。在这种情况下,我们将 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
对所有 n
都是 0
' s 除了 n=0
,其中 0j**0
是 1
。那么... 0j**math.nan
有不同的推理吗?还是执行有问题?
引用此 question which in turns quotes IEEE 754 (see Wikipedia),
The 2008 version of the IEEE 754 standard says that pow(1,qNaN) and pow(qNaN,0) should both return 1 since they return 1 whatever else is used instead of quiet NaN.
有关详细信息,请参阅 IEEE 754 2008 的第 56 页:
pow(x, ±0) is 1 for any x (even a zero, quiet NaN, or infinity)
pow(±0, y) is ±∞ and signals the divideByZero exception for y an odd
因此,推理似乎是无论k在指数中是什么数,1^k = 1
,1^Nan
也应该是1。为什么这个推理是合理的(我敢肯定是)我需要进一步挖掘。
我个人认为这是有道理的 - Nan
在数学中并不存在,只是我们的浮点表示无法处理它(或者,Nan 是“计算量太大,这是一些数字,但不确定是哪个”)。因此,1^Nan
可以是 1 的任意次幂(不是 1 的非数字),但由于答案始终为 1,因此只有将 1^Nan
定义为 1 才有用.