insert ANSI-mandated bogosity
[unix-history] / usr / src / lib / libm / common_source / lgamma.3
.\" Copyright (c) 1985, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" %sccs.include.redist.roff%
.\"
.\" @(#)lgamma.3 8.1 (Berkeley) %G%
.\"
.Dd
.Dt LGAMMA 3
.Os BSD 4.3
.Sh NAME
.Nm lgamma
.Nm gamma
.Nd log gamma function, gamma function
.Sh SYNOPSIS
.Fd #include <math.h>
.Ft extern int
.Fa signgam ;
.sp
.Ft double
.Fn lgamma "double x"
.Ft double
.Fn gamma "double x"
.Sh DESCRIPTION
.Fn Lgamma x
.if t \{\
returns ln\||\(*G(x)| where
.Bd -unfilled -offset indent
\(*G(x) = \(is\d\s8\z0\s10\u\u\s8\(if\s10\d t\u\s8x\-1\s10\d e\u\s8\-t\s10\d dt for x > 0 and
.br
\(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px)) for x < 1.
.Ed
.\}
.if n \
returns ln\||\(*G(x)|.
.Pp
The external integer
.Fa signgam
returns the sign of \(*G(x).
.Pp
.Fn Gamma x
returns \(*G(x), with no effect on
.Fa signgam .
.Sh IDIOSYNCRASIES
Do not use the expression
.Dq Li signgam\(**exp(lgamma(x))
to compute g := \(*G(x).
Instead use a program like this (in C):
.Bd -literal -offset indent
lg = lgamma(x); g = signgam\(**exp(lg);
.Ed
.Pp
Only after
.Fn lgamma
has returned can signgam be correct.
.Pp
For arguments in its range,
.Fn gamma
is preferred, as for positive arguments
it is accurate to within one unit in the last place.
Exponentiation of
.Fn lgamma
will lose up to 10 significant bits.
.Sh RETURN VALUES
.Fn Gamma
and
.Fn lgamma
return appropriate values unless an arguent is out of range.
Overflow will occur for sufficiently large positive values, and
non-positive integers.
On the
.Tn VAX,
the reserved operator is returned,
and
.Va errno
is set to
.Er ERANGE
For large non-integer negative values,
.Fn gamma
will underflow.
.Sh SEE ALSO
.Xr math 3 ,
.Xr infnan 3
.Sh HISTORY
The
.Nm lgamma
function appeared in
.Bx 4.3 .
The
.Nm gamma
function appeared in
.Bx 4.4 .
The name
.Fn gamma
was originally dedicated to the
.Fn lgamma
function, so some old code may no longer be compatible.