R: функция lgmma вне диапазона
В моем проекте мне нужно использовать функцию lgamma для вычисления очень больших чисел. Но R всегда показывает сообщение об ошибке: значение вне диапазона в lgamma
, Например:
lgamma(exp(1000))
#[1] Inf
#Warning message:
#value out of range in 'lgamma'
Есть ли подход к решению этой проблемы?
1 ответ
Вот подход, который вы можете рассмотреть:
lgamma_Approx1 <- function(z)
{
term1 <- 1 / 2 * (log(2 * pi) - log(z))
term2 <- z * (log(z + 1 / (12 * z - 1 / (10 * z))) - 1)
val <- term1 + term2
return(val)
}
lgamma_Approx2 <- function(z)
{
term1 <- 1 / 2 * (log(2 * pi) - log(z))
term2 <- z * (log(z) - 1)
val <- term1 + term2
return(val)
}
val <- 1000
lgamma(val)
5905.22
lgamma_Approx1(val)
5905.22
lgamma_Approx2(val)
5905.22
library(Rmpfr)
num <- as.bigz(10)
num <- num ^ 350
lgamma_Approx2(num)
Big Integer ('bigz') :
[1] 80399999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999598