在R软件中
a <- 123456789123456789123456789
sprintf("%27f",a)
#[1] "123456789123456791337762816.000000"
我得错了答案。我想要精确的a
值。
为什么系统显示错误的a
?
答案 0 :(得分:9)
您未获得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
多精度算术的其他选项可在&#34;多精度算术和符号数学&#34; numerical mathematics CRAN task view。
的副标题