这会计算(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
答案 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