lgamma
, lgamma_r
,
lgammaf
, lgammaf_r
,
lgammal
, lgammal_r
,
gamma
, gamma_r
,
gammaf
, gammaf_r
,
tgamma
, tgammaf
,
tgammal
, — log gamma
functions, gamma function
#include
<math.h>
extern int
signgam;
double
lgamma
(double
x);
double
lgamma_r
(double
x, int
*signgamp);
float
lgammaf
(float
x);
float
lgammaf_r
(float
x, int
*signgamp);
long double
lgammal
(long
double x);
long double
lgammal_r
(long
double x, int
*signgamp);
double
gamma
(double
x);
double
gamma_r
(double
x, int
*signgamp);
float
gammaf
(float
x);
float
gammaf_r
(float
x, int
*signgamp);
long double
tgamma
(double
x);
float
tgammaf
(float
x);
long double
tgammal
(long
double x);
lgamma
(x),
lgammaf
(x),
and
lgammal
(x)
return ln|Γ(x)|. The external integer signgam
returns the sign of Γ(x).
lgamma_r
(x,
signgamp),
lgammaf_r
(x,
signgamp), and
lgammal_r
(x,
signgamp) provide the same functionality as
lgamma
(x),
lgammaf
(x), and
lgammal
(x), but the caller
must provide an integer to store the sign of Γ(x).
The
tgamma
(x),
tgammaf
(x),
and
tgammal
(x)
functions return Γ(x), with no effect on
signgam.
gamma
(),
gammaf
(),
gamma_r
(),
and
gammaf_r
()
are deprecated aliases for lgamma
(),
lgammaf
(), lgamma_r
(), and
lgammaf_r
(), respectively.
Do not use the expression
“signgam∗exp(lgamma(x))
” to
compute g := Γ(x). Instead use a program like this (in C):
lg = lgamma(x); g = signgam∗exp(lg);
Only after
lgamma
()
or
lgammaf
()
has returned can signgam be correct.
For arguments in its range,
tgamma
()
is preferred, as for positive arguments it is accurate to within one unit in
the last place. Exponentiation of lgamma
() will lose
up to 10 significant bits.
gamma
(), gammaf
(),
gammal
(), gamma_r
(),
gammaf_r
(), gammal_r
(),
lgamma
(), lgammaf
(),
lgammal
(), lgamma_r
(),
lgammaf_r
(), and lgammal_r
()
return appropriate values unless an argument is out of range. Overflow will
occur for sufficiently large positive values, and non-positive integers. For
large non-integer negative values, tgamma
() will
underflow.
The lgamma
(),
lgammaf
(), lgammal
(),
tgamma
(), tgammaf
(), and
tgammal
() functions are expected to conform to
ISO/IEC 9899:1999
(“ISO C99”).
The lgamma
() function appeared in
4.3BSD. The gamma
() function
appeared in 4.4BSD as a function which computed
Γ(x). This version was used in FreeBSD 1.1.
The name gamma
() was originally dedicated to the
lgamma
() function, and that usage was restored by
switching to Sun's fdlibm in FreeBSD 1.1.5. The
tgamma
() function appeared in
FreeBSD 5.0. The 128-bit long
double version of tgammal
() replaced the
80-bit stub version in version in FreeBSD 14.1,
thanks to an appropriate implementation from Arm.