.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de) .\" Distributed under GPL .\" Based on glibc infopages .\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk .\" .\" Modified 2004-11-15, fixed error noted by Fabian Kreutz .\" .TH TGAMMA 3 2008-08-05 "GNU" "Linux Programmer's Manual" .SH NAME tgamma, tgammaf, tgammal \- true gamma function .SH SYNOPSIS .B #include .sp .BI "double tgamma(double " x ); .br .BI "float tgammaf(float " x ); .br .BI "long double tgammal(long double " x ); .sp Link with \fI\-lm\fP. .sp .in -4n Feature Test Macro Requirements for glibc (see .BR feature_test_macros (7)): .in .sp .ad l .BR tgamma (), .BR tgammaf (), .BR tgammal (): _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE; or .I cc\ -std=c99 .ad b .SH DESCRIPTION The Gamma function is defined by .sp Gamma(x) = integral from 0 to infinity of t^(x\-1) e^\-t dt .sp It is defined for every real number except for non-positive integers. For non-negative integral \fIm\fP one has .sp Gamma(m+1) = m! .sp and, more generally, for all \fIx\fP: .sp Gamma(x+1) = x * Gamma(x) .sp Furthermore, the following is valid for all values of \fIx\fP outside the poles: .sp Gamma(x) * Gamma(1 \- x) = PI / sin(PI * x) .PP .SH RETURN VALUE On success, these functions return Gamma(x). If .I x is a NaN, a NaN is returned. If .I x is positive infinity, positive infinity is returned. If .I x is a negative integer, or is negative infinity, a domain error occurs, and a NaN is returned. If the result overflows, a range error occurs, and the functions return .BR HUGE_VAL , .BR HUGE_VALF , or .BR HUGE_VALL , respectively, with the correct mathematical sign. If the result underflows, a range error occurs, and the functions return 0, with the correct mathematical sign. If .I x is -0 or +0, a pole error occurs, and the functions return .BR HUGE_VAL , .BR HUGE_VALF , or .BR HUGE_VALL , respectively, with the same sign as the 0. .SH ERRORS See .BR math_error (7) for information on how to determine whether an error has occurred when calling these functions. .PP The following errors can occur: .TP Domain error: \fIx\fP a negative integer, or negative infinity .\" FIXME . errno is not set to EDOM for x == -inf .\" Bug raised: http://sources.redhat.com/bugzilla/show_bug.cgi?id=6809 .I errno is set to .BR EDOM . An invalid floating-point exception .RB ( FE_INVALID ) is raised (but see BUGS). .TP Pole error: \fIx\fP is +0 or \-0 .I errno is set to .BR ERANGE . A divide-by-zero floating-point exception .RB ( FE_DIVBYZERO ) is raised. .TP Range error: result overflow .I errno is set to .BR ERANGE . An overflow floating-point exception .RB ( FE_OVERFLOW ) is raised. .PP glibc also gives the following error which is not specified C99 or POSIX.1-2001. .TP Range error: result underflow .\" e.g., tgamma(-172.5) on glibc 2.8/x86-32 .\" .I errno .\" is set to .\" .BR ERANGE . An underflow floating-point exception .RB ( FE_UNDERFLOW ) is raised. .IP .I errno is not set for this case. .\" FIXME . Is it intentional that errno is not set: .\" Bug raised: http://sources.redhat.com/bugzilla/show_bug.cgi?id=6810 .\" .\" glibc (as at 2.8) also supports and an inexact .\" exception for various cases. .SH "CONFORMING TO" C99, POSIX.1-2001. .SH NOTES This function had to be called "true gamma function" since there is already a function .BR gamma (3) that returns something else (see .BR gamma (3) for details). .SH BUGS If .I x is negative infinity, .I errno is not set (it should be set to .BE EDOM ). .\" Bug raised: http://sources.redhat.com/bugzilla/show_bug.cgi?id=6809 .SH "SEE ALSO" .BR gamma (3), .BR lgamma (3)