我很惊讶
>>> import math
>>> 1**math.nan
1.0
虽然我们也是,但那
>>> 0j**math.nan
0j
我没有找到任何其他例子。是否有一个我错过的理由或逻辑使得这个选择成为正确的选择?或者这是一个滑倒?
我期待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
1}}),如果我们同意论证不必是有限的,可能会被拉伸以涵盖0j**math.nan
为nan
的原因。
但如果这是场景背后的逻辑,那么0j**n
应该是0
,因为n
对于所有n=0
都是0j**0
,除了1
0j**math.nan
let lineDelta: number = ...
let endPos = startPos.translate(lineDelta, error.location.length);
let characterDelta: number = ...
let endPos = startPos.translate({
characterDelta: characterDelta,
lineDelta : error.location.length
});
。那么...... startPos.translate();
startPos.translate(lineDelta);
startPos.translate(lineDelta, characterDelta);
有不同的推理吗?或者这是实施中的问题?
答案 0 :(得分:6)
引用此question引用IEEE 754(参见Wikipedia),
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)是±∞并且表示divideByZero异常为y奇数
因此,推理似乎是无论指数中的k是多少,1^k = 1
,1^Nan
也应该是1.为什么推理是合理的(我确定是)我需要进一步挖掘。
就我个人而言,我认为这是有道理的 - Nan
在数学中并不存在,只是我们的浮点表示无法处理它(或者,Nan是“计算太多,这是一些数字但不确定哪个“)。因此,1^Nan
可以是1到任意幂(不是1到非数字的东西),但由于答案总是1,所以只有在1^Nan
定义为1时它才有用