lgamma 用户定义函数 returns 无限值

lgamma user defined function returns infinite value

这计算 (x-1)! 到 return 整数的 lgamma(x) 值的对数,但我的函数 log_gamma 只工作到 x = 171x > 171 它 returns Inf。我该如何解决这个问题?

log_gamma <- function(x){
  y <- 1
  if (x < 1)(
    return("Infinity")
  )
  if (x == 1)(
    return(0)
  )
  x <- x-1
  for (i in 1:x){
     y <- y*i
  }
    return(log(y))
}

您当前的解决方案首先计算 171!这是一个相当大的数字。相反,使用 log(a*b) = log(a) + log(b) 的事实将其计算为总和。

log_gamma <- function(x){
  y <- 1
  if (x < 1)(
    return("Infinity")
  )
  if (x == 1)(
    return(0)
  )
  x <- x-1
  for (i in 1:x){
     y <- y + log(i)
  }
    return(y)
}

log_gamma(171)
[1] 707.5731
log_gamma(172)
[1] 712.7147
log_gamma(1000)
[1] 5906.22