2

我想了解更多关于 R 中的精度计算会区分 Eg 的信息

-1128347132904321674821 < -1128347132904321674822
-1128347132904321674821 > -1128347132904321674822
-1128347132904321674821 == -1128347132904321674822

但是前两个答案是FALSE,第三个是TRUE

我只想知道如何在分数中包含所有数字

4

2 回答 2

4

当您输入一个大于最大整数大小的整数(您可以通过输入 找到.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
于 2013-10-11T18:12:23.193 回答
3

如果您需要大量数字的准确性,请使用其中一个gmpRmpfr(或两者:-))。

但请确保这是您的需要,而不是一般的浮点计算精度限制。

于 2013-10-11T17:56:05.897 回答