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
Другие вопросы по тегам