在 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 的“多精度算术和符号数学”子标题下提供了多精度算术的其他选项。