名前空間
変種
操作

tgamma, tgammaf, tgammal

提供: cppreference.com
< c‎ | numeric‎ | math
 
 
 
一般的な数学関数
関数
基本操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
指数関数
(C99)
(C99)
(C99)
(C99)
冪関数
(C99)
(C99)
三角関数と双曲線関数
(C99)
(C99)
(C99)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
tgamma
(C99)
最も近い整数
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
浮動小数点操作関数
(C99)(C99)
(C99)
(C99)
分類
(C99)
(C99)
(C99)
(C99)(C99)
マクロ定数
 
ヘッダ <math.h> で定義
float       tgammaf( float arg );
(1) (C99およびそれ以降)
double      tgamma( double arg );
(2) (C99およびそれ以降)
long double tgammal( long double arg );
(3) (C99およびそれ以降)
ヘッダ <tgmath.h> で定義
#define tgamma( arg )
(4) (C99およびそれ以降)
1-3) argガンマ関数を計算します。
4) 型総称マクロ。 arglong double 型の場合は tgammal が呼ばれます。 そうでなく、 arg が整数型または double 型の場合は tgamma が呼ばれます。 そうでなければ tgammaf が呼ばれます。

目次

[編集] 引数

arg - 浮動小数点値

[編集] 戻り値

エラーが発生しなければ、 arg のガンマ関数の値、つまり
0
targ-1
e-t dt
が返されます。

定義域エラーが発生した場合、処理系定義の値 (サポートされていれば NaN) が返されます。

極エラーが発生した場合、 ±HUGE_VAL±HUGE_VALF または ±HUGE_VALL が返されます。

オーバーフローによる値域エラーが発生した場合、 ±HUGE_VAL±HUGE_VALF または ±HUGE_VALL が返されます。

アンダーフローによる値域エラーが発生した場合、 (丸めた後の) 正しい値が返されます。

[編集] エラー処理

math_errhandling で規定されている通りにエラーが発生します。

arg がゼロまたはゼロより小さい整数の場合、極エラーまたは定義域エラーが発生するかもしれません。

処理系が IEEE 浮動小数点算術 (IEC 60559) をサポートしている場合、

  • 引数が ±0 であれば、 ±∞ が返され、 FE_DIVBYZERO が発生します。
  • 引数が負の整数であれば、 NaN が返され、 FE_INVALID が発生します。
  • 引数が -∞ であれば、 NaN が返され、 FE_INVALID が発生します。
  • 引数が +∞ であれば、 +∞ が返されます。
  • 引数が NaN であれば、 NaN が返されます。

[編集] ノート

arg が自然数の場合、 tgamma(arg)arg-1 の階乗です。 多くの実装では、引数が十分小さい整数の場合、整数の領域で正確な階乗を計算します。

IEEE 互換な double 型の場合、 0 < x < 1/DBL_MAX または x > 171.7 であればオーバーフローが発生します。

POSIX は、引数がゼロの場合は極エラーが発生するけれども、引数が負の整数のときは定義域エラーが発生することを要求しています。 また、将来的に負の整数引数に対する定義域エラーが極エラーに置き換えられるかもしれない (その場合、戻り値は NaN から ±∞ に変更されるであろう) ことも規定しています。

様々な処理系に gamma という名前の非標準な関数が存在していますが、その定義は一貫していません。 例えば、 gamma の glibc 版と 4.2BSD 版は lgamma を実行しますが、 gamma の 4.4BSD 版は tgamma を実行します。

[編集]

#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("tgamma(10) = %f, 9!=%f\n", tgamma(10), 2*3*4*5*6*7*8*9.0);
    printf("tgamma(0.5) = %f, sqrt(pi) = %f\n", sqrt(acos(-1)), tgamma(0.5));
    // special values
    printf("tgamma(+Inf) = %f\n", tgamma(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("tgamma(-1) = %f\n", tgamma(-1));
    if(errno == ERANGE) perror("    errno == ERANGE");
    else if(errno == EDOM)   perror("    errno == EDOM");
    if(fetestexcept(FE_DIVBYZERO)) puts("    FE_DIVBYZERO raised");
    else if(fetestexcept(FE_INVALID)) puts("    FE_INVALID raised");
}

出力例:

tgamma(10) = 362880.000000, 9!=362880.000000
tgamma(0.5) = 1.772454, sqrt(pi) = 1.772454
tgamma(+Inf) = inf
tgamma(-1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.8.4 The tgamma functions (p: 250)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.5.4 The tgamma functions (p: 525)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.8.4 The tgamma functions (p: 231)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.5.4 The tgamma functions (p: 462)

[編集] 関連項目

(C99)(C99)(C99)
ガンマ関数の (e を底とする) 自然対数を計算します
(関数) [edit]

[編集] 外部リンク

Weisstein, Eric W. "Gamma Function." From MathWorld--A Wolfram Web Resource.