xref: /freebsd/lib/msun/man/lgamma.3 (revision f7efd14df151cd21330a66aac3ca183beda0f62d)
13a8617a8SJordan K. Hubbard.\" Copyright (c) 1985, 1991 Regents of the University of California.
23a8617a8SJordan K. Hubbard.\" All rights reserved.
33a8617a8SJordan K. Hubbard.\"
43a8617a8SJordan K. Hubbard.\" Redistribution and use in source and binary forms, with or without
53a8617a8SJordan K. Hubbard.\" modification, are permitted provided that the following conditions
63a8617a8SJordan K. Hubbard.\" are met:
73a8617a8SJordan K. Hubbard.\" 1. Redistributions of source code must retain the above copyright
83a8617a8SJordan K. Hubbard.\"    notice, this list of conditions and the following disclaimer.
93a8617a8SJordan K. Hubbard.\" 2. Redistributions in binary form must reproduce the above copyright
103a8617a8SJordan K. Hubbard.\"    notice, this list of conditions and the following disclaimer in the
113a8617a8SJordan K. Hubbard.\"    documentation and/or other materials provided with the distribution.
123a8617a8SJordan K. Hubbard.\" 4. Neither the name of the University nor the names of its contributors
133a8617a8SJordan K. Hubbard.\"    may be used to endorse or promote products derived from this software
143a8617a8SJordan K. Hubbard.\"    without specific prior written permission.
153a8617a8SJordan K. Hubbard.\"
163a8617a8SJordan K. Hubbard.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
173a8617a8SJordan K. Hubbard.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
183a8617a8SJordan K. Hubbard.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
193a8617a8SJordan K. Hubbard.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
203a8617a8SJordan K. Hubbard.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
213a8617a8SJordan K. Hubbard.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
223a8617a8SJordan K. Hubbard.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
233a8617a8SJordan K. Hubbard.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
243a8617a8SJordan K. Hubbard.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
253a8617a8SJordan K. Hubbard.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
263a8617a8SJordan K. Hubbard.\" SUCH DAMAGE.
273a8617a8SJordan K. Hubbard.\"
283a8617a8SJordan K. Hubbard.\"     from: @(#)lgamma.3	6.6 (Berkeley) 12/3/92
297f3dea24SPeter Wemm.\" $FreeBSD$
303a8617a8SJordan K. Hubbard.\"
31*f7efd14dSSteve Kargl.Dd September 12, 2014
323a8617a8SJordan K. Hubbard.Dt LGAMMA 3
33a307d598SRuslan Ermilov.Os
343a8617a8SJordan K. Hubbard.Sh NAME
353a8617a8SJordan K. Hubbard.Nm lgamma ,
36457f6cd2SWarner Losh.Nm lgamma_r ,
377a15a32aSJordan K. Hubbard.Nm lgammaf ,
38457f6cd2SWarner Losh.Nm lgammaf_r ,
39*f7efd14dSSteve Kargl.Nm lgammal ,
40*f7efd14dSSteve Kargl.Nm lgammal_r ,
417a15a32aSJordan K. Hubbard.Nm gamma ,
42457f6cd2SWarner Losh.Nm gamma_r ,
4346d7c297SBruce Evans.Nm gammaf ,
44457f6cd2SWarner Losh.Nm gammaf_r ,
4571c11dd5SDavid Schultz.Nm tgamma ,
4671c11dd5SDavid Schultz.Nm tgammaf
4746d7c297SBruce Evans.Nd log gamma functions, gamma function
4864890443SBruce Evans.Sh LIBRARY
4964890443SBruce Evans.Lb libm
503a8617a8SJordan K. Hubbard.Sh SYNOPSIS
5132eef9aeSRuslan Ermilov.In math.h
523a8617a8SJordan K. Hubbard.Ft extern int
533a8617a8SJordan K. Hubbard.Fa signgam ;
543a8617a8SJordan K. Hubbard.sp
553a8617a8SJordan K. Hubbard.Ft double
563a8617a8SJordan K. Hubbard.Fn lgamma "double x"
57457f6cd2SWarner Losh.Ft double
583892c300SRuslan Ermilov.Fn lgamma_r "double x" "int *signgamp"
597a15a32aSJordan K. Hubbard.Ft float
607a15a32aSJordan K. Hubbard.Fn lgammaf "float x"
61457f6cd2SWarner Losh.Ft float
623892c300SRuslan Ermilov.Fn lgammaf_r "float x" "int *signgamp"
63*f7efd14dSSteve Kargl.Ft "long double"
64*f7efd14dSSteve Kargl.Fn lgammal "long double x"
65*f7efd14dSSteve Kargl.Ft "long double"
66*f7efd14dSSteve Kargl.Fn lgammal_r "long double x" "int *signgamp"
673a8617a8SJordan K. Hubbard.Ft double
683a8617a8SJordan K. Hubbard.Fn gamma "double x"
69457f6cd2SWarner Losh.Ft double
703892c300SRuslan Ermilov.Fn gamma_r "double x" "int *signgamp"
717a15a32aSJordan K. Hubbard.Ft float
72354fb385SBruce Evans.Fn gammaf "float x"
73457f6cd2SWarner Losh.Ft float
743892c300SRuslan Ermilov.Fn gammaf_r "float x" "int *signgamp"
75*f7efd14dSSteve Kargl.Ft "long double"
7646d7c297SBruce Evans.Fn tgamma "double x"
7771c11dd5SDavid Schultz.Ft float
7871c11dd5SDavid Schultz.Fn tgammaf "float x"
793a8617a8SJordan K. Hubbard.Sh DESCRIPTION
80*f7efd14dSSteve Kargl.Fn lgamma x ,
81*f7efd14dSSteve Kargl.Fn lgammaf x ,
827a15a32aSJordan K. Hubbardand
83*f7efd14dSSteve Kargl.Fn lgammal x
843a8617a8SJordan K. Hubbard.if t \{\
857a15a32aSJordan K. Hubbardreturn ln\||\(*G(x)| where
863a8617a8SJordan K. Hubbard.Bd -unfilled -offset indent
873a8617a8SJordan K. Hubbard\(*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
883a8617a8SJordan K. Hubbard\(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px))	for x < 1.
893a8617a8SJordan K. Hubbard.Ed
903a8617a8SJordan K. Hubbard.\}
913a8617a8SJordan K. Hubbard.if n \
92354fb385SBruce Evansreturn ln\||\(*G(x)|.
933a8617a8SJordan K. HubbardThe external integer
943a8617a8SJordan K. Hubbard.Fa signgam
953a8617a8SJordan K. Hubbardreturns the sign of \(*G(x).
963a8617a8SJordan K. Hubbard.Pp
97*f7efd14dSSteve Kargl.Fn lgamma_r x signgamp ,
98*f7efd14dSSteve Kargl.Fn lgammaf_r x signgamp ,
997a15a32aSJordan K. Hubbardand
100*f7efd14dSSteve Kargl.Fn lgammal_r x signgamp
101457f6cd2SWarner Loshprovide the same functionality as
102*f7efd14dSSteve Kargl.Fn lgamma x ,
103*f7efd14dSSteve Kargl.Fn lgammaf x ,
104457f6cd2SWarner Loshand
105*f7efd14dSSteve Kargl.Fn lgammal x ,
1063892c300SRuslan Ermilovbut the caller must provide an integer to store the sign of \(*G(x).
107457f6cd2SWarner Losh.Pp
10871c11dd5SDavid SchultzThe
10971c11dd5SDavid Schultz.Fn tgamma x
11071c11dd5SDavid Schultzand
11171c11dd5SDavid Schultz.Fn tgammaf x
11271c11dd5SDavid Schultzfunctions return \(*G(x), with no effect on
11371c11dd5SDavid Schultz.Fa signgam .
11471c11dd5SDavid Schultz.Pp
115457f6cd2SWarner Losh.Fn gamma ,
116457f6cd2SWarner Losh.Fn gammaf ,
117457f6cd2SWarner Losh.Fn gamma_r ,
118457f6cd2SWarner Loshand
119457f6cd2SWarner Losh.Fn gammaf_r
120675902aaSBruce Evansare deprecated aliases for
121457f6cd2SWarner Losh.Fn lgamma ,
122675902aaSBruce Evans.Fn lgammaf ,
123457f6cd2SWarner Losh.Fn lgamma_r ,
124457f6cd2SWarner Loshand
125457f6cd2SWarner Losh.Fn lgammaf_r ,
126675902aaSBruce Evansrespectively.
127*f7efd14dSSteve Kargl
1283a8617a8SJordan K. Hubbard.Sh IDIOSYNCRASIES
1293a8617a8SJordan K. HubbardDo not use the expression
1303a8617a8SJordan K. Hubbard.Dq Li signgam\(**exp(lgamma(x))
1313a8617a8SJordan K. Hubbardto compute g := \(*G(x).
1323a8617a8SJordan K. HubbardInstead use a program like this (in C):
1333a8617a8SJordan K. Hubbard.Bd -literal -offset indent
1343a8617a8SJordan K. Hubbardlg = lgamma(x); g = signgam\(**exp(lg);
1353a8617a8SJordan K. Hubbard.Ed
1363a8617a8SJordan K. Hubbard.Pp
1373a8617a8SJordan K. HubbardOnly after
1383a8617a8SJordan K. Hubbard.Fn lgamma
1397a15a32aSJordan K. Hubbardor
1407a15a32aSJordan K. Hubbard.Fn lgammaf
1413a8617a8SJordan K. Hubbardhas returned can signgam be correct.
14246d7c297SBruce Evans.Pp
14346d7c297SBruce EvansFor arguments in its range,
14446d7c297SBruce Evans.Fn tgamma
14546d7c297SBruce Evansis preferred, as for positive arguments
14646d7c297SBruce Evansit is accurate to within one unit in the last place.
14746d7c297SBruce EvansExponentiation of
14846d7c297SBruce Evans.Fn lgamma
14946d7c297SBruce Evanswill lose up to 10 significant bits.
1503a8617a8SJordan K. Hubbard.Sh RETURN VALUES
1517a15a32aSJordan K. Hubbard.Fn gamma ,
1527a15a32aSJordan K. Hubbard.Fn gammaf ,
153*f7efd14dSSteve Kargl.Fn gammal ,
154*f7efd14dSSteve Kargl.Fn gamma_r ,
155457f6cd2SWarner Losh.Fn gammaf_r ,
156*f7efd14dSSteve Kargl.Fn gammal_r ,
1577a15a32aSJordan K. Hubbard.Fn lgamma ,
158457f6cd2SWarner Losh.Fn lgammaf ,
159*f7efd14dSSteve Kargl.Fn lgammal ,
160*f7efd14dSSteve Kargl.Fn lgamma_r ,
161*f7efd14dSSteve Kargl.Fn lgammaf_r ,
1623a8617a8SJordan K. Hubbardand
163*f7efd14dSSteve Kargl.Fn lgammal_r
1643a8617a8SJordan K. Hubbardreturn appropriate values unless an argument is out of range.
1653a8617a8SJordan K. HubbardOverflow will occur for sufficiently large positive values, and
1663a8617a8SJordan K. Hubbardnon-positive integers.
16746d7c297SBruce EvansFor large non-integer negative values,
16846d7c297SBruce Evans.Fn tgamma
16946d7c297SBruce Evanswill underflow.
1703a8617a8SJordan K. Hubbard.Sh SEE ALSO
1714bd9ba3cSMike Pritchard.Xr math 3
17246d7c297SBruce Evans.Sh STANDARDS
17346d7c297SBruce EvansThe
17471c11dd5SDavid Schultz.Fn lgamma ,
17571c11dd5SDavid Schultz.Fn lgammaf ,
176*f7efd14dSSteve Kargl.Fn lgammal ,
17771c11dd5SDavid Schultz.Fn tgamma ,
17846d7c297SBruce Evansand
17971c11dd5SDavid Schultz.Fn tgammaf
18046d7c297SBruce Evansfunctions are expected to conform to
18146d7c297SBruce Evans.St -isoC-99 .
1823a8617a8SJordan K. Hubbard.Sh HISTORY
1833a8617a8SJordan K. HubbardThe
184563f6bdeSRuslan Ermilov.Fn lgamma
1853a8617a8SJordan K. Hubbardfunction appeared in
1863a8617a8SJordan K. Hubbard.Bx 4.3 .
1873a8617a8SJordan K. HubbardThe
188563f6bdeSRuslan Ermilov.Fn gamma
1893a8617a8SJordan K. Hubbardfunction appeared in
190a9dbc63dSDavid Malone.Bx 4.4
191a9dbc63dSDavid Maloneas a function which computed \(*G(x).
192675902aaSBruce EvansThis version was used in
193675902aaSBruce Evans.Fx 1.1 .
194675902aaSBruce EvansThe name
1953a8617a8SJordan K. Hubbard.Fn gamma
196675902aaSBruce Evanswas originally dedicated to the
197675902aaSBruce Evans.Fn lgamma
198675902aaSBruce Evansfunction,
199675902aaSBruce Evansand that usage was restored by switching to Sun's fdlibm in
200675902aaSBruce Evans.Fx 1.1.5 .
201a9dbc63dSDavid MaloneThe
202a9dbc63dSDavid Malone.Fn tgamma
20346d7c297SBruce Evansfunction appeared in
20446d7c297SBruce Evans.Fx 5.0 .
205