将整数存储为双精度数时,在 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 位整数?