Gamma 函数 returns 值不稳定?

Gamma function returns unstable value?

Gamma 函数不应将任何负值作为参数。查看下面发生奇怪事情的代码。这是R的问题吗?

我正在使用函数 optim 来优化一些函数,其中包含:

gamma(sum(alpha))

相对于alpha。 R returns 否定 alpha.

> gamma(sum(alpha))
[1] 3.753+14
>sum(alpha)
[1] -3
gamma(-3)
[1] NaN
Warning message:
In gamma(-3) NaN's produced.

有人可以解释一下吗?或者有什么优化建议?

谢谢!

Gamma 函数是 "not defined" 负整数参数值,因此 R returns 不是数字 (NaN)。 "strange" 行为的原因是 R 中数字的十进制表示。如果数字与最接近的整数相差不大,R 在打印期间对其进行舍入(实际上,当您键入 alpha 时,R 是调用 print(alpha)。请参阅下面此类行为的示例。

gamma(-3)
# [1] NaN
# Warning message:
#  In gamma(-3) : NaNs produced
x <- -c(1, 2, 3) / 2 - 1e-15
x
# [1] -0.5 -1.0 -1.5
sum(x)
# [1] -3
gamma(sum(x))
# [1] 5.361428e+13
curve(gamma, xlim = c(-3.5, -2.5)) 

请看下图,它解释了伽马函数在负整数附近的行为: