|
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <math.h> | ||
float tgammaf(float arg); | (1) | (since C99) |
double tgamma(double arg); | (2) | (since C99) |
longdouble tgammal(longdouble arg); | (3) | (since C99) |
Defined in header <tgmath.h> | ||
#define tgamma( arg ) | (4) | (since C99) |
tgammal is called. Otherwise, ifarg has integer type or the typedouble,tgamma is called. Otherwise,tgammaf is called.Contents |
| arg | - | floating-point value |
If no errors occur, the value of the gamma function ofarg, that is\(\Gamma(\mathtt{arg}) = \displaystyle\int_0^\infty\!\! t^{\mathtt{arg}-1} e^{-t}\, dt\)∫∞
0targ-1
e-t dt, is returned.
If a domain error occurs, an implementation-defined value (NaN where supported) 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.
If a range error due to underflow occurs, the correct value (after rounding) is returned.
Errors are reported as specified inmath_errhandling.
Ifarg is zero or is an integer less than zero, a pole error or a domain error may occur.
If the implementation supports IEEE floating-point arithmetic (IEC 60559):
Ifarg is a natural number,tgamma(arg) is the factorial ofarg-1. Many implementations calculate the exact integer-domain factorial if the argument is a sufficiently small integer.
For IEEE-compatible typedouble, overflow happens if0< x<1/DBL_MAX or ifx>171.7.
POSIX requires that a pole error occurs if the argument is zero, but a domain error occurs when the argument is a negative integer. It also specifies that in future, domain errors may be replaced by pole errors for negative integer arguments (in which case the return value in those cases would change from NaN to ±∞).
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("tgamma(10) = %f, 9!=%f\n", tgamma(10),2*3*4*5*6*7*8*9.0);printf("tgamma(0.5) = %f, sqrt(pi) = %f\n", tgamma(0.5),sqrt(acos(-1))); // special valuesprintf("tgamma(+Inf) = %f\n", tgamma(INFINITY)); // error handlingerrno=0;feclearexcept(FE_ALL_EXCEPT);printf("tgamma(-1) = %f\n", tgamma(-1));if(errno==ERANGE)perror(" errno == ERANGE");elseif(errno==EDOM)perror(" errno == EDOM");if(fetestexcept(FE_DIVBYZERO))puts(" FE_DIVBYZERO raised");elseif(fetestexcept(FE_INVALID))puts(" FE_INVALID raised");}
Possible output:
tgamma(10) = 362880.000000, 9!=362880.000000tgamma(0.5) = 1.772454, sqrt(pi) = 1.772454tgamma(+Inf) = inftgamma(-1) = nan errno == EDOM: Numerical argument out of domain FE_INVALID raised
(C99)(C99)(C99) | computes natural (base-e) logarithm of the gamma function (function)[edit] |
C++ documentation fortgamma | |
| Weisstein, Eric W. "Gamma Function." From MathWorld — A Wolfram Web Resource. |