105a0b428SJohn Marino.\" $OpenBSD: lgamma.3,v 1.22 2015/01/15 19:06:31 schwarze Exp $ 205a0b428SJohn Marino.\" Copyright (c) 1985, 1991 Regents of the University of California. 305a0b428SJohn Marino.\" All rights reserved. 405a0b428SJohn Marino.\" 505a0b428SJohn Marino.\" Redistribution and use in source and binary forms, with or without 605a0b428SJohn Marino.\" modification, are permitted provided that the following conditions 705a0b428SJohn Marino.\" are met: 805a0b428SJohn Marino.\" 1. Redistributions of source code must retain the above copyright 905a0b428SJohn Marino.\" notice, this list of conditions and the following disclaimer. 1005a0b428SJohn Marino.\" 2. Redistributions in binary form must reproduce the above copyright 1105a0b428SJohn Marino.\" notice, this list of conditions and the following disclaimer in the 1205a0b428SJohn Marino.\" documentation and/or other materials provided with the distribution. 1305a0b428SJohn Marino.\" 3. Neither the name of the University nor the names of its contributors 1405a0b428SJohn Marino.\" may be used to endorse or promote products derived from this software 1505a0b428SJohn Marino.\" without specific prior written permission. 1605a0b428SJohn Marino.\" 1705a0b428SJohn Marino.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1805a0b428SJohn Marino.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1905a0b428SJohn Marino.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2005a0b428SJohn Marino.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2105a0b428SJohn Marino.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2205a0b428SJohn Marino.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2305a0b428SJohn Marino.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2405a0b428SJohn Marino.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2505a0b428SJohn Marino.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2605a0b428SJohn Marino.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2705a0b428SJohn Marino.\" SUCH DAMAGE. 2805a0b428SJohn Marino.\" 2905a0b428SJohn Marino.\" from: @(#)lgamma.3 6.6 (Berkeley) 12/3/92 3005a0b428SJohn Marino.\" 3105a0b428SJohn Marino.Dd $Mdocdate: January 15 2015 $ 3205a0b428SJohn Marino.Dt LGAMMA 3 3305a0b428SJohn Marino.Os 3405a0b428SJohn Marino.Sh NAME 3505a0b428SJohn Marino.Nm lgamma , 3605a0b428SJohn Marino.Nm lgammaf , 3705a0b428SJohn Marino.Nm lgammal , 3805a0b428SJohn Marino.Nm lgamma_r , 3905a0b428SJohn Marino.Nm lgammaf_r , 40*d46ba01eSSascha Wildner.\".Nm lgammal_r , 4105a0b428SJohn Marino.Nm tgamma , 4205a0b428SJohn Marino.Nm tgammaf , 4305a0b428SJohn Marino.Nm tgammal 4405a0b428SJohn Marino.Nd log gamma functions 4505a0b428SJohn Marino.Sh SYNOPSIS 4605a0b428SJohn Marino.In math.h 4705a0b428SJohn Marino.Ft extern int 4805a0b428SJohn Marino.Fa signgam ; 4905a0b428SJohn Marino.sp 5005a0b428SJohn Marino.Ft double 5105a0b428SJohn Marino.Fn lgamma "double x" 5205a0b428SJohn Marino.Ft float 5305a0b428SJohn Marino.Fn lgammaf "float x" 5405a0b428SJohn Marino.Ft long double 5505a0b428SJohn Marino.Fn lgammal "long double x" 5605a0b428SJohn Marino.Ft double 5705a0b428SJohn Marino.Fn lgamma_r "double x" "int *signgamp" 5805a0b428SJohn Marino.Ft float 5905a0b428SJohn Marino.Fn lgammaf_r "float x" "int *signgamp" 60*d46ba01eSSascha Wildner.\".Ft long double 61*d46ba01eSSascha Wildner.\".Fn lgammal_r "long double x" "int *signgamp" 6205a0b428SJohn Marino.Ft double 6305a0b428SJohn Marino.Fn tgamma "double x" 6405a0b428SJohn Marino.Ft float 6505a0b428SJohn Marino.Fn tgammaf "float x" 6605a0b428SJohn Marino.Ft long double 6705a0b428SJohn Marino.Fn tgammal "long double x" 6805a0b428SJohn Marino.Sh DESCRIPTION 6905a0b428SJohn Marino.Fn lgamma x 7005a0b428SJohn Marino.if t \{\ 7105a0b428SJohn Marinoreturns ln\||\(*G(x)| where 7205a0b428SJohn Marino.Bd -unfilled -offset indent 7305a0b428SJohn Marino\(*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 7405a0b428SJohn Marino.br 7505a0b428SJohn Marino\(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px)) for x < 1. 7605a0b428SJohn Marino.Ed 7705a0b428SJohn Marino.\} 7805a0b428SJohn Marino.if n \ 7905a0b428SJohn Marinoreturns ln\||\(*G(x)|. 8005a0b428SJohn Marino.Pp 8105a0b428SJohn MarinoThe external integer 8205a0b428SJohn Marino.Fa signgam 8305a0b428SJohn Marinoreturns the sign of \(*G(x). 8405a0b428SJohn MarinoThe 8505a0b428SJohn Marino.Fn lgammaf 8605a0b428SJohn Marinofunction is a single precision version of 8705a0b428SJohn Marino.Fn lgamma . 8805a0b428SJohn MarinoThe 8905a0b428SJohn Marino.Fn lgammal 9005a0b428SJohn Marinofunction is an extended precision version of 9105a0b428SJohn Marino.Fn lgamma . 9205a0b428SJohn Marino.Pp 9305a0b428SJohn MarinoThe 94*d46ba01eSSascha Wildner.Fn lgamma_r 9505a0b428SJohn Marinoand 96*d46ba01eSSascha Wildner.Fn lgammaf_r 97*d46ba01eSSascha Wildner.\"and 98*d46ba01eSSascha Wildner.\".Fn lgammal_r 9905a0b428SJohn Marinofunctions are thread-safe versions of 100*d46ba01eSSascha Wildner.Fn lgamma 10105a0b428SJohn Marinoand 102*d46ba01eSSascha Wildner.Fn lgammaf 103*d46ba01eSSascha Wildner.\"and 104*d46ba01eSSascha Wildner.\".Fn lgammal 10505a0b428SJohn Marinothat return the sign via the 10605a0b428SJohn Marino.Fa signgamp 10705a0b428SJohn Marinopointer instead of modifying 10805a0b428SJohn Marino.Fa signgam . 10905a0b428SJohn Marino.Pp 11005a0b428SJohn MarinoThe 11105a0b428SJohn Marino.Fn tgamma x , 11205a0b428SJohn Marino.Fn tgammaf x 11305a0b428SJohn Marinoand 11405a0b428SJohn Marino.Fn tgammal x 11505a0b428SJohn Marinofunctions return \(*G(x), with no effect on 11605a0b428SJohn Marino.Fa signgam . 11705a0b428SJohn Marino.Sh IDIOSYNCRASIES 11805a0b428SJohn MarinoDo not use the expression 11905a0b428SJohn Marino.Sq Li signgam\(**exp(lgamma(x)) 12005a0b428SJohn Marinoto compute g := \(*G(x). 12105a0b428SJohn MarinoInstead use a program like this (in C): 12205a0b428SJohn Marino.Bd -literal -offset indent 12305a0b428SJohn Marinolg = lgamma(x); g = signgam\(**exp(lg); 12405a0b428SJohn Marino.Ed 12505a0b428SJohn Marino.Pp 12605a0b428SJohn MarinoOnly after 12705a0b428SJohn Marino.Fn lgamma 12805a0b428SJohn Marinohas returned can signgam be correct. 12905a0b428SJohn Marino.Pp 13005a0b428SJohn MarinoFor arguments in its range, 13105a0b428SJohn Marino.Fn tgamma 13205a0b428SJohn Marinois preferred, as for positive arguments 13305a0b428SJohn Marinoit is accurate to within one unit in the last place. 13405a0b428SJohn Marino.Sh RETURN VALUES 13505a0b428SJohn Marino.Fn lgamma 13605a0b428SJohn Marinoreturns appropriate values unless an argument is out of range. 13705a0b428SJohn MarinoOverflow will occur for sufficiently large positive values, and 13805a0b428SJohn Marinonon-positive integers. 13905a0b428SJohn MarinoFor large non-integer negative values, 14005a0b428SJohn Marino.Fn tgamma 14105a0b428SJohn Marinowill underflow. 14205a0b428SJohn MarinoOn the VAX, the reserved operator is returned, and 14305a0b428SJohn Marino.Va errno 14405a0b428SJohn Marinois set to 14505a0b428SJohn Marino.Er ERANGE . 14605a0b428SJohn Marino.Sh SEE ALSO 14705a0b428SJohn Marino.Xr infnan 3 14805a0b428SJohn Marino.Sh STANDARDS 14905a0b428SJohn MarinoThe 15005a0b428SJohn Marino.Fn lgamma , 15105a0b428SJohn Marino.Fn lgammaf , 15205a0b428SJohn Marino.Fn lgammal , 15305a0b428SJohn Marino.Fn tgamma , 15405a0b428SJohn Marino.Fn tgammaf , 15505a0b428SJohn Marinoand 15605a0b428SJohn Marino.Fn tgammal 15705a0b428SJohn Marinofunctions are expected to conform to 15805a0b428SJohn Marino.St -isoC-99 . 15905a0b428SJohn Marino.Pp 16005a0b428SJohn MarinoThe 161*d46ba01eSSascha Wildner.Fn lgamma_r 16205a0b428SJohn Marinoand 163*d46ba01eSSascha Wildner.Fn lgammaf_r 164*d46ba01eSSascha Wildner.\"and 165*d46ba01eSSascha Wildner.\".Fn lgammal_r 16605a0b428SJohn Marinofunctions are 16705a0b428SJohn Marino.Bx 16805a0b428SJohn Marinoextensions. 16905a0b428SJohn Marino.Pp 17005a0b428SJohn Marino.Fn gamma 17105a0b428SJohn Marinoand 17205a0b428SJohn Marino.Fn gammaf 17305a0b428SJohn Marinoare deprecated aliases for 17405a0b428SJohn Marino.Fn lgamma 17505a0b428SJohn Marinoand 17605a0b428SJohn Marino.Fn lgammaf , 17705a0b428SJohn Marinorespectively. 17805a0b428SJohn Marino.Sh HISTORY 17905a0b428SJohn MarinoA 18005a0b428SJohn Marino.Fn gamma 18105a0b428SJohn Marinofunction first appeared in 18205a0b428SJohn Marino.At v5 . 18305a0b428SJohn MarinoThe 18405a0b428SJohn Marino.Fn lgamma 18505a0b428SJohn Marinofunction first appeared in 18605a0b428SJohn Marino.Bx 4.3 . 18705a0b428SJohn MarinoThe 18805a0b428SJohn Marino.Fn tgamma 18905a0b428SJohn Marinofunction first appeared in 19005a0b428SJohn Marino.Ox 4.4 , 19105a0b428SJohn Marinoand is based on the 19205a0b428SJohn Marino.Fn gamma 19305a0b428SJohn Marinofunction that appeared in 19405a0b428SJohn Marino.Bx 4.4 19505a0b428SJohn Marinoas a function to compute \(*G(x). 196