【发布时间】:2021-12-30 06:34:45
【问题描述】:
我想定义一个非常简单的函数如下:
地点:
我目前的工作
prob <- function(x, n) {
quan <- qgamma(0.95, n, 1)
temp <- quan / (x)^2
first_term <- exp(-temp)
second_term <- temp^(0:(n - 1)) / factorial(0:(n - 1))
second_term <- sum(second_term)
first_term * second_term
}
这里的问题是,在大 n 的总和(第二项)中,我们处理的是非常大的数字,因此 R 将它们视为无穷大。
例如:
prob(0.5, n = 1000)
[1] NaN
因为 n = 1000 的分位数等于 1052.577,所以在分母中我们必须计算 1052.577^999 和分母中的阶乘 999。R 将这两个数字理解为无穷大:
> factorial(999)
[1] Inf
> 1052.577^999
[1] Inf
所以当它试图划分它们时,会产生NaN。然而,这个函数的输出总是在区间 (0, 1) 中,因为它是一个概率。有没有可能在这一点上计算这个函数的值?
【问题讨论】:
-
一个明显的选择是在对数尺度上构造求和的各个元素,然后在求和之前取幂。
-
Inf/Inf# [1] NaN -
Brobdingnag包按照 Limey 的建议处理大量数字 -
我下载了这个包。不幸的是,我使用它获得了这个结果>
brob(1052.577^999 / factorial(999)) [1] +exp(NaN)
标签: r function calculation