在Mathematica中有一个选项可以看到这个问题来计算两个误差函数之间的差异.但是,我还没有在R中找到类似的东西.
我需要计算像Erf(1604.041) - Erf(3117.127)这样的东西并获得非零值......
您可以接近@James的评论中给出的4e-1117421的结果.首先,可以在R中像这样计算误差函数:
1 - 2 * pnorm(-sqrt(2) * x)
但是,由于浮点精度,这将为您提供数字零.幸运的是,pnorm
可以返回p值的日志.然后,您可以使用任意精度数对其进行取幂:
library(Rmpfr) 2 * exp(mpfr(pnorm(-sqrt(2) * 1604.041, log.p = TRUE), precBits = 32)) - 2 * exp(mpfr(pnorm(-sqrt(2) * 3117.127, log.p = TRUE), precBits = 32)) #1 'mpfr' number of precision 32 bits #[1] 4.2826176801e-1117421
(请注意,您只获得log-p值的浮点精度.)
但是,我想知道在哪种应用中需要这样的精度.它基本上是零值.
编辑:我刚刚发现Rmpfr提供了补充错误功能的实现.你可以这样做:
erfc(mpfr(3117.127, precBits = 32)) - erfc(mpfr(1604.041, precBits = 32)) #1 'mpfr' number of precision 32 bits #[1] -4.2854514871e-1117421