.\" 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 . |