123456789123456789123456789

123456789123456789123456789

在 R 软件中

a <- 123456789123456789123456789
sprintf("%27f",a)
#[1] "123456789123456791337762816.000000"

我得到了错误的答案。我想要确切的 a 值。

为什么系统会显示 a 的错误值?

最佳答案

您没有获得 a 的确切值的原因是 R 将其存储为 double 而不是整数。因为a很大,所以当您分配a时会发生一些舍入。

通常要将事物存储为整数,您会在数字末尾使用 L ;就像是:

a <- 12L
class(a)
# [1] "integer"

但是,您的数字对于 R 中的标准整数来说太大了,并且您不得不使用双重表示:
a <- 123456789123456789123456789L
# Warning message:
# non-integer value 123456789123456789123456789L qualified with L; using numeric value
class(a)
# [1] "numeric"

您将需要多个精度才能准确存储这么大的整数。一种选择是 gmp 包:
library(gmp)
a<-as.bigz("123456789123456789123456789")
a
# Big Integer ('bigz') :
# [1] 123456789123456789123456789

numerical mathematics CRAN task view 的“多精度算术和符号数学”子标题下提供了多精度算术的其他选项。

10-06 10:42