|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <math.h> | ||
float lgammaf(float arg); | (1) | (since C99) |
double lgamma(double arg); | (2) | (since C99) |
longdouble lgammal(longdouble arg); | (3) | (since C99) |
Defined in header <tgmath.h> | ||
#define lgamma( arg ) | (4) | (since C99) |
lgammal is called. Otherwise, ifarg has integer type or the typedouble,lgamma is called. Otherwise,lgammaf is called.Contents |
| arg | - | floating-point value |
If no errors occur, the value of the logarithm of the gamma function ofarg, that is\(\log_{e}|{\int_0^\infty t^{arg-1} e^{-t} \mathsf{d}t}|\)loge|∫∞
0targ-1
e-t dt|, is returned.
If a pole error occurs,+HUGE_VAL,+HUGE_VALF, or+HUGE_VALL is returned.
If a range error due to overflow occurs,±HUGE_VAL,±HUGE_VALF, or±HUGE_VALL is returned.
Errors are reported as specified inmath_errhandling.
Ifarg is zero or is an integer less than zero, a pole error may occur.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
Ifarg is a natural number,lgamma(arg) is the logarithm of the factorial ofarg-1.
ThePOSIX version oflgamma is not thread-safe: each execution of the function stores the sign of the gamma function ofarg in the static external variablesigngam. Some implementations providelgamma_r, which takes a pointer to user-provided storage for singgam as the second parameter, and is thread-safe.
There is a non-standard function namedgamma in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version ofgamma executeslgamma, but 4.4BSD version ofgamma executestgamma.
#include <errno.h>#include <fenv.h>#include <float.h>#include <math.h>#include <stdio.h>// #pragma STDC FENV_ACCESS ON int main(void){printf("lgamma(10) = %f, log(9!) = %f\n", lgamma(10),log(2*3*4*5*6*7*8*9));constdouble pi=acos(-1);printf("lgamma(0.5) = %f, log(sqrt(pi)) = %f\n",log(sqrt(pi)), lgamma(0.5));// special valuesprintf("lgamma(1) = %f\n", lgamma(1));printf("lgamma(+Inf) = %f\n", lgamma(INFINITY)); // error handlingerrno=0;feclearexcept(FE_ALL_EXCEPT);printf("lgamma(0) = %f\n", lgamma(0));if(errno==ERANGE)perror(" errno == ERANGE");if(fetestexcept(FE_DIVBYZERO))puts(" FE_DIVBYZERO raised");}
Possible output:
lgamma(10) = 12.801827, log(9!) = 12.801827lgamma(0.5) = 0.572365, log(sqrt(pi)) = 0.572365lgamma(1) = 0.000000lgamma(+Inf) = inflgamma(0) = inf errno == ERANGE: Numerical result out of range FE_DIVBYZERO raised
(C99)(C99)(C99) | computes gamma function (function)[edit] |
C++ documentation forlgamma | |
| Weisstein, Eric W. "Log Gamma Function." From MathWorld — A Wolfram Web Resource. |