R-gmp包如何处理“Inf”?

时间:2013-10-07 12:03:07

标签: r gmp

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的回答。

1 个答案:

答案 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