2

整数を 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 ビット整数を格納できるのはどうしてですか?

4

1 に答える 1