# libm.info: gamma

**Go forward to hypot**

**Go backward to frexp**

**Go up to Math**

**Go to the top op libm**

# `gamma', `gammaf', `lgamma', `lgammaf', `gamma_r',

*Synopsis*
#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 `exp(gamma(N))' is equivalent to
`N*exp(gamma(N-1))'. Accordingly, the results of the gamma function
itself grow very quickly. `gamma' is defined as the natural log of the
gamma function, rather than the gamma function itself, 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).

*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.

Created Mon Nov 8 17:42:56 2004 on tillpc with info_to_html version 0.9.6.