【发布时间】:2013-07-25 16:14:25
【问题描述】:
早期代码打高尔夫球的地方提示为什么会:
>NaN^0
[1] 1
NA^0 为 1 非常有意义,因为 NA 缺少数据,并且 任何 数字增加到 0 将给出 1,包括 -Inf 和 Inf。然而NaN 应该代表not-a-number,那么为什么会这样呢?当?NaN 的帮助页面指出:
在 R 中,基本上所有的数学函数(包括基本的
Arithmetic),应该与+/- Inf和NaN一起正常工作 输入或输出。基本规则应该是与
Infs的调用和关系确实是 具有适当数学极限的语句。涉及
NaN的计算将返回NaN或NA: 这两个不能保证,可能取决于 R 平台(因为 编译器可能会重新排序计算)。
这背后是否有哲学上的原因,还是仅仅与 R 如何表示这些常数有关?
【问题讨论】:
-
我不知道 R 但在我机器上的 Python 中也发生了同样的错误:1**nan 返回 1.0
-
@hivert 至少在 R 的情况下
^是一个不只是调用C函数pow的函数,它检查基数为 1 或指数为 0,如果任一为TRUE,则在调用pow之前返回1.:if((x1 = INTEGER(s1)[i1]) == 1 || (x2 = INTEGER(s2)[i2]) == 0); REAL(ans)[i] = 1.; -
我不相信
NA^0 == 1有多大意义,因为Inf^0是一个不确定的形式。也就是说,当被视为极限时,我们不能仅从这种形式确定原始极限的值是多少。例如,当 n 接近无穷大时,exp(n)^*(1/n)接近 e,但n^(1/n)接近 1,即使两者看起来都像Inf^0。 -
对此的评论:“任何增加到 0 的数字都会给出 1,包括 -Inf 和 Inf”:对于 -Inf 和 +Inf,值应该是 NaN,因为这些是不确定的限制。当 x 接近 0 时,想想 (1 + 1/x)^x。
标签: r math na arithmetic-expressions