当存储整数作为双精度时,在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位整数?
答案 0 :(得分:1)
我知道这是一个老问题,但是我在搜索中找到了答案,我找到了答案。
作为mdsumner commented,根据定义,double是64位。双打存储在R< REALSXP
类型中。
bit64包将来自各种integer64
方法的输入转换为uint64_t
(C99支持),并将64位存储在R REALSXP
中。