3

gmp从运行时我注意到以下内容R

Rgames> log2(Inf)
[1] Inf
Rgames> log2(as.bigz(Inf))
[1] 8000

这里发生了什么事?还是gmp语言(或gmp::log2.bigz方法)不支持“Inf”的概念?

编辑:乔希的评论是正确的:这不是log2函数本身,而是as.bigz似乎转换Inf为整数2^8000的事实。bigz更改标题以匹配。

顺便说一句,还有这个:

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

符合乔希的回答。

4

1 回答 1

4

根据请求发布乔希的侦探工作:

如果您下载 的源代码gmp,并在 中搜索“Inf” $gmp-HOME$/src/bigintegerR.cc,您会发现以下几行:

/// New: numeric '+- Inf' give +- "Large" instead of NA

稍后

else { // dj is +- Inf : use LARGE ( = +- 2 ^ 80000 -- arbitrarily )

我的猜测是,由于 GMP 库没有 的概念/表示Inf,R 包作者必须就如何将用户提供的Inf值传递给外部库做出一些决定。看起来他们以前转换InfNA,现在他们将其转换为2^80000

于 2013-10-07T15:16:00.177 回答