double tgamma(double x);
float tgammaf(float x);
long double tgammal(long double x);
-lm でリンクする。
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
tgamma(), tgammaf(), tgammal(): _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE; or cc -std=c99
Gamma(x) = t^(x-1) e^-t dt の 0 から無限大までの積分
この関数は正でない整数を除くすべての実数に対して定義されている。 非負の整数 m に関して、以下が成立する:
Gamma(m+1) = m!
より一般的には、すべての x に関して以下が成立する:
Gamma(x+1) = x * Gamma(x)
さらに、極を除くすべての x で次式も成立する:
Gamma(x) * Gamma(1 - x) = PI / sin(PI * x)
x が NaN の場合、NaN が返される。
x が正の無限大の場合、正の無限大が返される。
x が負の整数か負の無限大の場合、領域エラー (domain error) が発生し、 NaN が返される。
結果がオーバーフローする場合、範囲エラー (range error) が発生し、 各関数はそれぞれ HUGE_VAL, HUGE_VALF, HUGE_VALL, を返す。この際、数学的に正しい符号が付与される。
結果がアンダーフローする場合、範囲エラー (range error) が発生し、 関数は 0 をを返す。この際、数学的に正しい符号が付与される。
x が -0 か +0 の場合、極エラー (pole error) が発生し、 各関数はそれぞれ HUGE_VAL, HUGE_VALF, HUGE_VALL, を返す。 0 と同じ符号が付与される。
以下のエラーが発生する可能性がある。
glibc では、C99 や POSIX.1-2001 で規定されていない以下のエラーも 起こり得る。
glibc バージョン 2.3.3 以前では、 引き数に +0 や -0 を渡すと、極エラーではなく、 領域エラーを間違って発生していた (領域エラーの場合、 errno に EDOM を設定され、 FE_INVALID 例外が発生する)。