我想了解更多关于 R 中的精度计算会区分 Eg 的信息
-1128347132904321674821 < -1128347132904321674822
-1128347132904321674821 > -1128347132904321674822
-1128347132904321674821 == -1128347132904321674822
但是前两个答案是FALSE
,第三个是TRUE
我只想知道如何在分数中包含所有数字
我想了解更多关于 R 中的精度计算会区分 Eg 的信息
-1128347132904321674821 < -1128347132904321674822
-1128347132904321674821 > -1128347132904321674822
-1128347132904321674821 == -1128347132904321674822
但是前两个答案是FALSE
,第三个是TRUE
我只想知道如何在分数中包含所有数字
当您输入一个大于最大整数大小的整数(您可以通过输入 找到.Machine$integer.max
)时,R 会将其强制为双精度数。此外,只有(略少于)2^64 个唯一的双精度值。2^64 大约是 1.84*10^19,而您输入的数字大约是 10^21。但是,双精度的所有 64 位都不是精度位。其中1个是符号位,11个是尾数(即指数位)。所以你只能得到 52 位的精度,也就是大约 15 或 16 个小数位。您可以在 R 中对此进行测试:
> for(i in 10:20)
cat(i,10^i == 10^i+1,"\n")
10 FALSE
11 FALSE
12 FALSE
13 FALSE
14 FALSE
15 FALSE
16 TRUE
17 TRUE
18 TRUE
19 TRUE
20 TRUE
所以你看,在大约 15 位数字之后,双精度数提供的精度已经耗尽。可以在 R 中进行更高精度的算术运算,但您需要加载提供此功能的库。一个这样的库是gmp
:
> library(gmp)
> x<-as.bigz("-1128347132904321674821")
> y<-as.bigz("-1128347132904321674822")
> x<y
[1] FALSE
> x>y
[1] TRUE
> x==y
[1] FALSE
> x==y+1
[1] TRUE
如果您需要大量数字的准确性,请使用其中一个gmp
或Rmpfr
(或两者:-))。
但请确保这是您的需要,而不是一般的浮点计算精度限制。