整数を double として格納すると、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 オブジェクトは、特別なクラスで装飾された double にすぎないように見えます。
> typeof(as.integer64(2)^53)
[1] "double"
32 ビット double が 64 ビット整数を格納できるのはどうしてですか?