r语言 - 精确存储大整数



In R software

a <- 123456789123456789123456789
sprintf("%27f",a)
#[1] "123456789123456791337762816.000000"
我得到了错误的答案。我想要准确的a

为什么系统显示错误的a

您没有得到a的确切值的原因是R将其存储为双精度而不是整数。因为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

可在数值数学CRAN任务视图的"多精度算术和符号数学"副标题下找到其他多精度算术选项。

最新更新