【发布时间】:2014-11-07 06:13:57
【问题描述】:
将整数存储为双精度数时,在 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 位的 double 怎么可能存储一个 64 位的整数?
【问题讨论】:
-
bit64 定义了一个
+.integer64方法。这就是您的两个示例之间的区别。 -
@mdsumner 即使是 x86 架构师?
-
是的。这就是“双”的意思。 2*4 字节,而不是“单个”。 R 没有现成的 32 位浮点类型