gamma
, gammaf
, lgamma
, lgammaf
, gamma_r
,#include <math.h> double gamma(double x); float gammaf(float x); double lgamma(double x); float lgammaf(float x); double gamma_r(double x, int *signgamp); float gammaf_r(float x, int *signgamp); double lgamma_r(double x, int *signgamp); float lgammaf_r(float x, int *signgamp);Description
gamma
calculates
the natural logarithm of the gamma function of x. The gamma function
(exp(gamma(x))
) is a generalization of factorial, and retains
the property that
Accordingly, the results of the gamma function itself grow very
quickly. gamma
is defined as
to extend the useful range of results representable.
The sign of the result is returned in the global variable signgam
,
which is declared in math.h.
gammaf
performs the same calculation as gamma
, but uses and
returns float
values.
lgamma
and lgammaf
are alternate names for gamma
and
gammaf
. The use of lgamma
instead of gamma
is a reminder
that these functions compute the log of the gamma function, rather
than the gamma function itself.
The functions gamma_r
, gammaf_r
, lgamma_r
, and
lgammaf_r
are just like gamma
, gammaf
, lgamma
, and
lgammaf
, respectively, but take an additional argument. This
additional argument is a pointer to an integer. This additional
argument is used to return the sign of the result, and the global
variable signgam
is not used. These functions may be used for
reentrant calls (but they will still set the global variable errno
if an error occurs).
Do not confuse the function gamma_r
, which takes an additional
argument which is a pointer to an integer, with the function
_gamma_r
, which takes an additional argument which is a pointer to
a reentrancy structure.
Returns
Normally, the computed result is returned.
When x is a nonpositive integer, gamma
returns HUGE_VAL
and errno
is set to EDOM
. If the result overflows, gamma
returns HUGE_VAL
and errno
is set to ERANGE
.
You can modify this error treatment using matherr
.
Portability
Neither gamma
nor gammaf
is ANSI C.