2017-01-20 12 views
0

これはlgamma(x)の整数値を返しますが、log_gamma関数はx = 171の場合にのみInfを返します。どうすればこの問題を解決できますか?lgammaユーザ定義関数が無限の値を返します

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)) 
} 

答えて

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 
+0

ありがとう – newguy

関連する問題