| .\" Copyright (c) 1985, 1991 Regents of the University of California. |
| .\" All rights reserved. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. All advertising materials mentioning features or use of this software |
| .\" must display the following acknowledgement: |
| .\" This product includes software developed by the University of |
| .\" California, Berkeley and its contributors. |
| .\" 4. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" |
| .\" from: @(#)lgamma.3 6.6 (Berkeley) 12/3/92 |
| .\" $FreeBSD: src/lib/msun/man/lgamma.3,v 1.22 2005/01/16 16:46:14 ru Exp $ |
| .\" |
| .Dd January 14, 2005 |
| .Dt LGAMMA 3 |
| .Os |
| .Sh NAME |
| .Nm lgamma , |
| .Nm lgamma_r , |
| .Nm lgammaf , |
| .Nm lgammaf_r , |
| .Nm gamma , |
| .Nm gamma_r , |
| .Nm gammaf , |
| .Nm gammaf_r , |
| .Nm tgamma |
| .Nd log gamma functions, gamma function |
| .Sh LIBRARY |
| .Lb libm |
| .Sh SYNOPSIS |
| .In math.h |
| .Ft extern int |
| .Fa signgam ; |
| .sp |
| .Ft double |
| .Fn lgamma "double x" |
| .Ft double |
| .Fn lgamma_r "double x" "int *signgamp" |
| .Ft float |
| .Fn lgammaf "float x" |
| .Ft float |
| .Fn lgammaf_r "float x" "int *signgamp" |
| .Ft double |
| .Fn gamma "double x" |
| .Ft double |
| .Fn gamma_r "double x" "int *signgamp" |
| .Ft float |
| .Fn gammaf "float x" |
| .Ft float |
| .Fn gammaf_r "float x" "int *signgamp" |
| .Ft double |
| .Fn tgamma "double x" |
| .Sh DESCRIPTION |
| .Fn lgamma x |
| and |
| .Fn lgammaf x |
| .if t \{\ |
| return 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 |
| \(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px)) for x < 1. |
| .Ed |
| .\} |
| .if n \ |
| return ln\||\(*G(x)|. |
| .Pp |
| The external integer |
| .Fa signgam |
| returns the sign of \(*G(x). |
| .Pp |
| .Fn lgamma_r x signgamp |
| and |
| .Fn lgammaf_r x signgamp |
| provide the same functionality as |
| .Fn lgamma x |
| and |
| .Fn lgammaf x |
| but the caller must provide an integer to store the sign of \(*G(x). |
| .Pp |
| .Fn gamma , |
| .Fn gammaf , |
| .Fn gamma_r , |
| and |
| .Fn gammaf_r |
| are deprecated aliases for |
| .Fn lgamma , |
| .Fn lgammaf , |
| .Fn lgamma_r , |
| and |
| .Fn lgammaf_r , |
| respectively. |
| .Fn tgamma 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 |
| or |
| .Fn lgammaf |
| has returned can signgam be correct. |
| .Pp |
| For arguments in its range, |
| .Fn tgamma |
| 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 , |
| .Fn gamma_r , |
| .Fn gammaf , |
| .Fn gammaf_r , |
| .Fn lgamma , |
| .Fn lgamma_r , |
| .Fn lgammaf , |
| and |
| .Fn lgammaf_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, |
| .Fn tgamma |
| will underflow. |
| .Sh SEE ALSO |
| .Xr math 3 |
| .Sh STANDARDS |
| The |
| .Fn lgamma |
| and |
| .Fn tgamma |
| functions are expected to conform to |
| .St -isoC-99 . |
| .Sh HISTORY |
| The |
| .Fn lgamma |
| function appeared in |
| .Bx 4.3 . |
| The |
| .Fn gamma |
| function appeared in |
| .Bx 4.4 |
| as a function which computed \(*G(x). |
| This version was used in |
| .Fx 1.1 . |
| The name |
| .Fn gamma |
| was originally dedicated to the |
| .Fn lgamma |
| function, |
| and that usage was restored by switching to Sun's fdlibm in |
| .Fx 1.1.5 . |
| The |
| .Fn tgamma |
| function appeared in |
| .Fx 5.0 . |