lgamma 用户定义函数 returns 无限值
lgamma user defined function returns infinite value
这计算 (x-1)!
到 return 整数的 lgamma(x)
值的对数,但我的函数 log_gamma 只工作到 x = 171
为 x > 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
这计算 (x-1)!
到 return 整数的 lgamma(x)
值的对数,但我的函数 log_gamma 只工作到 x = 171
为 x > 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