在Mathematica中,有一个选项see this question来计算两个错误函数之间的差异。但是,我还没有在R中找到类似的东西。
我需要计算像Erf(1604.041) - Erf(3117.127)这样的东西并获得非零值......
答案 0 :(得分:5)
你可以接近@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