R:简单代数和的近似误差

R: approximation error with simple algebraic sums

我的脚本中有一个明显的错误。 几个小时后,我发现这是一个小数近似的问题。

要使问题可重现,请考虑以下事项:

0.02 - 0.000904686260609299 - 0.005   ==  
                                  0.02 + (-0.000904686260609299 - 0.005)
#[1] FALSE

其中:

print(0.02 -0.000904686260609299 -0.005, 22)
print(0.02 + (-0.000904686260609299 -0.005), 22)
#[1] 0.01409531373939069964774
#[1] 0.01409531373939070138246

想象一下你有长向量的情况 a,b,c:

a -b -c  ==  a + (-b -c)

差异可能具有统计显着性。

我可以提高内部逼近的级别以便在 return TRUE 以上进行测试吗?

如果我必须选择,哪个结果是最佳近似值: a -b -c 还是 a + (-b -c)

回答第一个问题(可以提高浮点精度吗?):gmp包提供了对任意精度运算的支持。

install.packages("gmp", dependencies=TRUE)  # didn't see any dependencies
library(gmp)
z <- as.bigq(- 0.000904686260609299)  # make smallest value a big-rational
 0.02 +z -0.005 == 0.02 +(z -0.005)
#[1] TRUE

还有一个列出系统要求的 R 包 Rmpfr

SystemRequirements: gmp (>= 4.2.3), mpfr (>= 3.0.0)

我在 Ubuntu 中安装了 mpfr 使用:

$ sudo apt-get install libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg

我似乎不需要 gmp 的系统安装,但回头看控制台记录,我发现它是在 gmp 安装期间完成的,但我没有注意到。