从gmp
运行R
时注意到以下内容:
Rgames> log2(Inf)
[1] Inf
Rgames> log2(as.bigz(Inf))
[1] 8000
这里发生了什么?或者gmp
语言(或gmp::log2.bigz
方法)是否不支持“Inf”的概念?
编辑:Josh的评论是正确的:它不是log2
函数本身,而是as.bigz
似乎将Inf
转换为2^8000
作为{{1}的事实}} 整数。将标题更改为匹配。
bigz
编辑:那是愚蠢的。 Rgames> log2(-Inf)
[1] NaN
Warning message:
NaNs produced
Rgames> log2(as.bigz(-Inf))
[1] NaN
为log2(negative_anything)
但是,
NaN
适合Josh的回答。
答案 0 :(得分:4)
根据要求发布Josh的侦探工作:
如果您下载gmp
的来源,并在$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
。