当将整个数字存储为双倍时,在2^53之后就会发生精密恒星丢失:
> print(2^53, digits=20)
[1] 9007199254740992
> print(2^53+1, digits=20)
[1] 9007199254740992R中的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位整数?
发布于 2017-07-28 19:43:52
我知道这是个老生常谈的问题,但我在一次搜索中发现了这个问题,我找到了答案。
作为mdsumner评论,从定义上说,double是64位.双倍存储在R的REALSXP类型中。bit64包将输入从其各种integer64方法转换为uint64_t (C99支持),并将64位存储在R的REALSXP中。
https://stackoverflow.com/questions/26795212
复制相似问题