2

将整数存储为双精度数时,在 2^53 之后发生精度损失:

> print(2^53, digits=20)
[1] 9007199254740992
> print(2^53+1, digits=20)
[1] 9007199254740992

R 中的bit64包最多可以存储 2^63 的整数:

> library(bit64)
> print(as.integer64(2)^53, digits=20)
[1] 9007199254740992
> print(as.integer64(2)^53+1, digits=20)
[1] 9007199254740993

然而,看起来 integer64 对象只是用一个特殊的类装饰的双精度:

> typeof(as.integer64(2)^53)
[1] "double"

32 位双精度怎么可能存储 64 位整数?

4

1 回答 1

1

我知道这是一个老问题,但它出现在我所做的搜索中,我能够找到答案。

正如mdsumner 评论的那样,根据定义,双精度数是 64 位的。双打存储在 R 的REALSXP类型中。bit64 包将其各种integer64方法的输入转换为uint64_t(C99 支持)并将 64 位存储在 R's 中REALSXP

于 2017-07-28T19:43:52.357 回答