将浮点精度添加到qnorm / pnorm?

时间:2011-05-09 03:44:47

标签: r floating-point precision normal-distribution

我有兴趣在从当前级别计算qnorm / pnorm时增加浮点数限制,例如:

x <- pnorm(10) # 1
qnorm(x) # Inf
qnorm(.9999999999999999444) # The highst limit I've found that still return a <<Inf number

是否(在合理的时间内)可以做到?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:10)

如果参数位于上尾,您应该能够通过计算1-p获得更好的精度。像这样:

> x = pnorm(10, lower.tail=F)
> qnorm(x, lower.tail=F)
10

我希望(尽管我不确定)pnorm()函数指的是硬件支持的任何浮点大小的C或Fortran例程。可能更好地重新安排您的问题,因此不需要精确度。

然后,如果你正在处理非常大的z值,你可以使用log.p = T:

> qnorm(pnorm(100, low=F, log=T), low=F, log=T)
100

对不起,这不是你想要的。但我认为它会更具可扩展性 - pnorm在高z值时会如此迅速地命中1(毕竟它是e ^( - x ^ 2))即使你添加更多位也会快速耗尽。