在R软件中
a <- 123456789123456789123456789
sprintf("%27f",a)
#[1] "123456789123456791337762816.000000"
我得到了错误的答案。我想要准确的a
value.
为什么系统显示错误的值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 任务视图 https://cran.r-project.org/web/views/NumericalMathematics.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)