tgamma, tgammaf, tgammal — true gamma function
#include <math.h>
double tgamma( |
double x) ; |
float tgammaf( |
float x) ; |
long double tgammal( |
long double x) ; |
Note | ||||
---|---|---|---|---|
|
Note | |
---|---|
Link with |
The Gamma function is defined by
Gamma(x) = integral from 0 to infinity of t^(x−1) e^−t dt
It is defined for every real number except for nonpositive
integers. For nonnegative integral m
one has
Gamma(m+1) = m!
and, more generally, for all x
:
Gamma(x+1) = x * Gamma(x)
Furthermore, the following is valid for all values of
x
outside the
poles:
Gamma(x) * Gamma(1 − x) = PI / sin(PI * x)
On success, these functions return Gamma(x).
If x
is a NaN, a
NaN is returned.
If x
is positive
infinity, positive infinity is returned.
If x
is a negative
integer, or is negative infinity, a domain error occurs, and
a NaN is returned.
If the result overflows, a range error occurs, and the
functions return HUGE_VAL
,
HUGE_VALF
, or HUGE_VALL
, respectively, with the correct
mathematical sign.
If the result underflows, a range error occurs, and the functions return 0, with the correct mathematical sign.
If x
is -0 or +0,
a pole error occurs, and the functions return HUGE_VAL
, HUGE_VALF
, or HUGE_VALL
, respectively, with the same sign
as the 0.
See math_error(7) for information on how to determine whether an error has occurred when calling these functions.
The following errors can occur:
x
is a negative integer, or
negative infinityerrno
is set to
EDOM. An invalid
floating-point exception (FE_INVALID
) is raised (but see
BUGS).
x
is +0 or
−0errno
is set to
ERANGE. A divide-by-zero
floating-point exception (FE_DIVBYZERO
) is raised.
errno
is set to
ERANGE. An overflow
floating-point exception (FE_OVERFLOW
) is raised.
glibc also gives the following error which is not specified in C99 or POSIX.1-2001.
An underflow floating-point exception (FE_UNDERFLOW
) is raised.
errno
is not set for
this case.
This function had to be called "true gamma function" since there is already a function gamma(3) that returns something else (see gamma(3) for details).
If x
is negative
infinity, errno
is not set (it
should be set to EDOM).
In glibc versions 2.3.3 and earlier, an argument of +0 or
-0 incorrectly produced a domain error (errno
set to EDOM and an FE_INVALID
exception raised), rather than a
pole error.
This page is part of release 3.24 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
Copyright 2002 Walter Harms (walter.harmsinformatik.uni-oldenburg.de) Distributed under GPL Based on glibc infopages and Copyright 2008, Linux Foundation, written by Michael Kerrisk <mtk.manpagesgmail.com> Modified 2004-11-15, fixed error noted by Fabian Kreutz <kreutzdbs.uni-hannover.de> |