语法

#include <math.h>

double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x);

double lgamma_r(double x, int *signp);
float lgammaf_r(float x, int *signp);
long double lgammal_r(long double x, int *signp);

extern int signgam;

与-lm链接。

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

lgamma():

_ISOC99_SOURCE || _POSIX_C_SOURCE>= 200112L || _XOPEN_SOURCE || / *自glibc 2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本
lgammaf(),

lgammal():

_ISOC99_SOURCE || _POSIX_C_SOURCE>= 200112L || / *自glibc 2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本
lgamma_r(),

lgammaf_r(),

lgammal_r():

/ *自glibc 2.19以来:* / _DEFAULT_SOURCE || / * Glibc版本
signgam:
_XOPEN_SOURCE || / *自glibc 2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本

名称

lgamma,lgammaf,lgammal,lgamma_r,lgammaf_r,lgammal_r,signgam-对数伽马函数

说明

有关Gamma函数的定义,请参见tgamma(3)。

lgamma(),lgammaf()和lgammal()函数返回Gamma函数绝对值的自然对数。 Gamma函数的符号在中声明的外部整数signgam中返回。当Gamma函数为正时为1或为零,为负值时为-1。

由于使用恒定位置的signgam不是线程安全的,因此引入了函数lgamma_r(),lgammaf_r()和lgammal_r();他们通过参数signp返回符号。

另外参见

tgamma(3)

返回值

成功执行后,这些函数将返回Gamma(x)的自然对数。

如果x是NaN,则返回NaN。

如果x为1或2,则返回+0。

如果x为正无穷大或负无穷大,则返回正无穷大。

如果x是一个非正整数,则会发生极坐标错误,并且这些函数分别返回+ HUGE_VAL,+ HUGE_VALF或+ HUGE_VALL。

如果结果溢出,则会发生范围错误,并且函数将分别以正确的数学符号返回HUGE_VAL,HUGE_VALF或HUGE_VALL。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

遵循规范

lgamma()函数在C99,POSIX.1-2001和POSIX.1-2008中指定。 signgam在POSIX.1-2001和POSIX.1-2008中指定,但在C99中未指定。 lgamma_r()函数是非标准函数,但在其他几个系统上也存在。

BUGS

在glibc 2.9和更早版本中,当发生极点错误时,errno设置为EDOM;而不是POSIX授权的ERANGE。从2.10版开始,glibc做正确的事情。

LGAMMA - Linux手册页

Linux程序员手册 第3部分
更新日期: 2017-09-15

错误说明

有关如何确定调用这些函数时是否发生错误的信息,请参见math_error(7)。

可能会发生以下错误:

Pole error: xis a nonpositive integer
errno设置为ERANGE(但请参阅BUGS)。产生了除零浮点异常(FE_DIVBYZERO)。
Range error: result overflow
errno设置为ERANGE。引发了一个溢出浮点异常(FE_OVERFLOW)。
日期:2019-08-20 18:00:46 来源:oir作者:oir