aar*_*thi 5 algorithm precision r floating-point-precision
在R软件中
a <- 123456789123456789123456789
sprintf("%27f",a)
#[1] "123456789123456791337762816.000000"
Run Code Online (Sandbox Code Playgroud)
我得到了错误的答案.我想要确切的a
价值.
为什么系统显示错误的值a
?
jos*_*ber 10
你没有得到确切值的原因a
是R将它存储为double而不是整数.因为a
非常大,所以在分配时会发生一些舍入a
.
通常将事物存储为整数,您将L
在数字的末尾使用; 就像是:
a <- 12L
class(a)
# [1] "integer"
Run Code Online (Sandbox Code Playgroud)
但是,对于R中的标准整数,您的数字太大,并且您被迫使用双重表示:
a <- 123456789123456789123456789L
# Warning message:
# non-integer value 123456789123456789123456789L qualified with L; using numeric value
class(a)
# [1] "numeric"
Run Code Online (Sandbox Code Playgroud)
您将需要多个精度来精确存储这么大的整数.一个选项是gmp
包:
library(gmp)
a<-as.bigz("123456789123456789123456789")
a
# Big Integer ('bigz') :
# [1] 123456789123456789123456789
Run Code Online (Sandbox Code Playgroud)
在数值数学CRAN任务视图的"多精度算术和符号数学"子标题下可以获得多精度算术的其他选项.
归档时间: |
|
查看次数: |
1350 次 |
最近记录: |