Sim*_*lon 64 math r arithmetic-expressions
由早期代码打高尔夫提示为什么会:
>NaN^0
[1] 1
Run Code Online (Sandbox Code Playgroud)
它非常有意义的NA^0
是1,因为NA
丢失数据,以及任何升至0号将为1,包括-Inf
和Inf
.但是NaN
应该代表非数字,为什么会这样呢?当?NaN
州的帮助页面时,这更令人困惑/担忧:
在R中,基本上所有数学函数(包括基本算术)都应该与+/- Inf和NaN一起作为输入或输出正常工作.
基本规则应该是呼叫和与Infs的关系确实是具有适当数学限制的陈述.
涉及NaN的计算将返回NaN或NA:这两者中的哪一个不能保证并且可能依赖于R平台(因为编译器可能重新排序计算).
这背后有一个哲学原因,还是仅仅与R代表这些常数有关?
42-*_*42- 27
这在引用的帮助页面中引用 ?'NaN'
"IEC 60559标准,也称为ANSI/IEEE 754浮点标准.
http://en.wikipedia.org/wiki/NaN."
在那里你会找到关于应该创建NaN的说法:
"There are three kinds of operations that can return NaN:[5]
Operations with a NaN as at least one operand.
Run Code Online (Sandbox Code Playgroud)
它可能来自特定的C编译器,如您引用的注释所示.这就是GNU C文档所说的:
http://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html
"另一方面,NaN会感染任何涉及它的计算.除非计算产生相同的结果,无论实际值是否取代NaN,结果都是NaN."
因此,在编写代码时,GNU-C人员似乎有不同的标准.据报道,2008版ANSI/IEEE 754浮点标准提出了这样的建议:
http://en.wikipedia.org/wiki/NaN#Function_definition
公布的标准不是免费的.因此,如果您有访问权限或金钱,您可以在这里查看:
http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=4610933
Mar*_*ler 15
是的,我已经迟到了,但作为参与此设计的R Core成员,让我回想一下上面评论过的内容.NaN保留和NA保留在R中"等效地"起作用,因此如果您同意NA ^ 0应该给出1,则NaN ^ 0 | - > 1是结果.
确实(正如其他人所说)你应该真正阅读R的帮助页面而不是C或IEEE标准来回答这些问题,而SimonO101正确引用
1 ^ y和y ^ 0总是1
而且我很确定我参与其中(如果不是作者).请注意,能够提供非NaN答案是好的,也不错,在其他编程语言不同的情况下也是如此.这样一条规则的结果是更多东西能够自动正常工作; 在另一种情况下,R程序员会被要求自己做更多特殊的外壳.
换句话说,如上所述(在所有情况下返回非NaN)的简单规则是一个很好的规则,因为它在数学意义上传播连续性:lim_x f(x)= f(lim x).我们有一些案例显然有利于(即不需要特殊的套管,我正在重复......)遵守上述"= 1"规则,而不是传播NaN.正如我所说的那样,sqrt(-1)^ 0也是这样一个例子,因为只要你扩展到复平面,1 就是正确的结果.
这是一个推理.来自Goldberg:
在IEEE 754中,NaN通常表示为具有指数e_max + 1和非零有效数的浮点数.
NaN
浮点数也是如此,但具有特殊含义.将数字增加到幂零将其指数设置为零,因此它将不再是NaN.
另请注意:
> 1^NaN
[1] 1
Run Code Online (Sandbox Code Playgroud)
一个是指数为零的数字.