.\" Modified 2004-11-15, fixed error noted by Fabian Kreutz
.\" <kreutz@dbs.uni-hannover.de>
.\"
-.TH TGAMMA 3 2010-09-20 "GNU" "Linux Programmer's Manual"
+.TH TGAMMA 3 2017-09-15 "GNU" "Linux Programmer's Manual"
.SH NAME
tgamma, tgammaf, tgammal \- true gamma function
.SH SYNOPSIS
.B #include <math.h>
-.sp
+.PP
.BI "double tgamma(double " x );
.br
.BI "float tgammaf(float " x );
.br
.BI "long double tgammal(long double " x );
-.sp
+.PP
Link with \fI\-lm\fP.
-.sp
+.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
-.sp
+.PP
.ad l
.BR tgamma (),
.BR tgammaf (),
.BR tgammal ():
.RS 4
-_XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE ||
-_POSIX_C_SOURCE\ >=\ 200112L;
-.br
-or
-.I cc\ -std=c99
+_ISOC99_SOURCE ||
+_POSIX_C_SOURCE\ >=\ 200112L
.RE
.ad
.SH DESCRIPTION
+These functions calculate the Gamma function of
+.IR x .
+.PP
The Gamma function is defined by
-.sp
- Gamma(x) = integral from 0 to infinity of t^(x\-1) e^\-t dt
-.sp
+.PP
+.RS
+Gamma(x) = integral from 0 to infinity of t^(x\-1) e^\-t dt
+.RE
+.PP
It is defined for every real number except for nonpositive integers.
For nonnegative integral
.I m
one has
-.sp
- Gamma(m+1) = m!
-.sp
+.PP
+.RS
+Gamma(m+1) = m!
+.RE
+.PP
and, more generally, for all
.IR x :
-.sp
- Gamma(x+1) = x * Gamma(x)
-.sp
+.PP
+.RS
+Gamma(x+1) = x * Gamma(x)
+.RE
+.PP
Furthermore, the following is valid for all values of
.I x
outside the poles:
-.sp
- Gamma(x) * Gamma(1 \- x) = PI / sin(PI * x)
.PP
+.RS
+Gamma(x) * Gamma(1 \- x) = PI / sin(PI * x)
+.RE
.SH RETURN VALUE
On success, these functions return Gamma(x).
-
+.PP
If
.I x
is a NaN, a NaN is returned.
-
+.PP
If
.I x
is positive infinity, positive infinity is returned.
-
+.PP
If
.I x
is a negative integer, or is negative infinity,
a domain error occurs,
and a NaN is returned.
-
+.PP
If the result overflows,
a range error occurs,
and the functions return
or
.BR HUGE_VALL ,
respectively, with the correct mathematical sign.
-
+.PP
If the result underflows,
a range error occurs,
and the functions return 0, with the correct mathematical sign.
-
+.PP
If
.I x
is \-0 or +0,
.\" .BR ERANGE .
An underflow floating-point exception
.RB ( FE_UNDERFLOW )
-is raised.
-.IP
+is raised, and
.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
+is set to
+.BR ERANGE .
+.\" glibc (as at 2.8) also supports an inexact
.\" exception for various cases.
.SH VERSIONS
These functions first appeared in glibc in version 2.1.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbw30 lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR tgamma (),
+.BR tgammaf (),
+.BR tgammal ()
+T} Thread safety MT-Safe
+.TE
.SH CONFORMING TO
-C99, POSIX.1-2001.
+C99, POSIX.1-2001, POSIX.1-2008.
.SH NOTES
This function had to be called "true gamma function"
since there is already a function
.I errno
to
.B EDOM
-when
+when
.I x
is negative infinity.
-
+.PP
+Before glibc 2.19,
+.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=6810
+the glibc implementation of these functions did not set
+.I errno
+to
+.B ERANGE
+on an underflow range error.
+.I x
+.PP
+.\"
In glibc versions 2.3.3 and earlier,
an argument of +0 or \-0 incorrectly produced a domain error
.RI ( errno