我在运行
这里发生了什么?或者是语言(或方法)不支持“Inf”概念?编辑:Josh的评论是正确的:它不是函数本身,而是似乎将转换为<2^8000>作为整数。更改标题以匹配。顺便说一句,还有这个:
符合Josh的答案。
R
中的gmp
时注意到以下内容:Rgames> log2(Inf)
[1] Inf
Rgames> log2(as.bigz(Inf))
[1] 8000
这里发生了什么?或者是语言(或方法)不支持“Inf”概念?编辑:Josh的评论是正确的:它不是函数本身,而是似乎将转换为<2^8000>作为整数。更改标题以匹配。顺便说一句,还有这个:
Rgames> log2(-Inf)
[1] NaN
Warning message:
NaNs produced
Rgames> log2(as.bigz(-Inf))
[1] NaN
编辑:那样做很愚蠢。log2(negative_anything)
的结果是NaN
。
但是,
Rgames> log2(-as.bigz(-Inf))
[1] 8000
符合Josh的答案。
as.bigz(Inf)
的打印值,就会发现这与log2
没有任何关系,而log2
的行为似乎相当合理... - Josh O'Brienas.bigz(Inf)
了,那么问题是什么?你是在问为什么做出了这个设计决策吗?它是否是底层GMP库的属性?这是否有记录?还是其他什么?(我确实同意这种行为很奇怪和出乎意料...) - Josh O'Brien$gmp-HOME$/src/bigintegerR.cc
中搜索“Inf”,您会发现以下几行:/// New: numeric '+- Inf' give +- "Large" instead of NA
,稍后是else { // dj is +- Inf : use LARGE ( = +- 2 ^ 80000 -- arbitrarily )
。我猜测由于GMP库没有“Inf”的概念/表示,因此R软件包的作者必须对如何将用户提供的“Inf”值传递给外部库做出一些决策。看起来他们曾经将“Inf”转换为“NA”,现在则将其转换为2^80000。 - Josh O'Brien