bit64如何在double中存储long long int

时间:2014-11-07 06:13:58

标签: r int64

当存储整数作为双精度时,在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

然而看起来整个64个对象只是用特殊类加倍打扮:

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

32位双精度如何可以存储64位整数?

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是我在搜索中找到了答案,我找到了答案。

作为mdsumner commented,根据定义,double是64位。双打存储在R< REALSXP类型中。 bit64包将来自各种integer64方法的输入转换为uint64_t(C99支持),并将64位存储在R REALSXP中。