lgamma用户定义函数返回无限值

时间:2017-01-20 19:34:56

标签: r user-defined-functions factorial

这会计算(x-1)!的日志以返回整数的lgamma(x)值,但我的函数log_gamma仅在x = 171 x > 171时才会返回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)) } 。我该如何解决这个问题?

https://dme0ih8comzn4.cloudfront.net/imaging/v3/editor.js

1 个答案:

答案 0 :(得分:1)

您当前的解决方案首先计算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