Namespaces
Variants

std:: tgamma, std:: tgammaf, std:: tgammal

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
ヘッダーで定義 <cmath>
(1)
float tgamma ( float num ) ;

double tgamma ( double num ) ;

long double tgamma ( long double num ) ;
(C++23まで)
/*floating-point-type*/
tgamma ( /*floating-point-type*/ num ) ;
(C++23から)
(constexpr since C++26)
float tgammaf ( float num ) ;
(2) (C++11から)
(constexpr since C++26)
long double tgammal ( long double num ) ;
(3) (C++11から)
(constexpr since C++26)
ヘッダーで定義 <simd>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

tgamma ( const V & v_num ) ;
(S) (C++26から)
ヘッダーで定義 <cmath>
template < class Integer >
double tgamma ( Integer num ) ;
(A) (constexpr since C++26)
1-3) num ガンマ関数 を計算する。 ライブラリは、パラメータの型としてすべてのcv修飾されない浮動小数点型に対する std::tgamma のオーバーロードを提供する。 (C++23以降)
S) SIMDオーバーロードは、 v_num に対して要素ごとに std::tgamma を実行します。
(定義については math-floating-point および deduced-simd-t を参照)
(C++26以降)
A) すべての整数型に対して追加のオーバーロードが提供されており、これらは double として扱われます。
(C++11以降)

目次

パラメータ

num - 浮動小数点または整数値

戻り値

エラーが発生しない場合、 num のガンマ関数の値、すなわち
0
t num-1
e -t d t
が返されます。

ドメインエラーが発生した場合、実装定義の値(NaNがサポートされている場合はNaN)が返されます。

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

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

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

エラーハンドリング

エラーは、 math_errhandling で指定された通りに報告されます。

num がゼロまたはゼロより小さい整数の場合、極エラーまたは定義域エラーが発生する可能性があります。

IEEE浮動小数点演算(IEC 60559)を実装がサポートしている場合、

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

注記

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

IEEE互換の型 double の場合、オーバーフローは 0 < num && num < 1 / DBL_MAX の場合、または num > 171.7 の場合に発生します。

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

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

追加のオーバーロードは (A) と完全に同一である必要はありません。整数型の引数 num に対して、 std :: tgamma ( num ) std :: tgamma ( static_cast < double > ( num ) ) と同じ効果を持つことを保証するのに十分であればよいのです。

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "tgamma(10) = " << std::tgamma(10)
              << ", 9! = " << 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 << '\n'
              << "tgamma(0.5) = " << std::tgamma(0.5)
              << ", sqrt(pi) = " << std::sqrt(std::acos(-1)) << '\n';
    // 特殊値
    std::cout << "tgamma(1) = " << std::tgamma(1) << '\n'
              << "tgamma(+Inf) = " << std::tgamma(INFINITY) << '\n';
    // エラー処理
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "tgamma(-1) = " << std::tgamma(-1) << '\n';
    if (errno == EDOM)
        std::cout << "    errno == EDOM: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
}

出力例:

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

関連項目

(C++11) (C++11) (C++11)
ガンマ関数の自然対数
(関数)
(C++17) (C++17) (C++17)
ベータ関数
(関数)

外部リンク

Weisstein, Eric W. "Gamma Function." From MathWorld — A Wolfram Web Resource.
Weisstein, Eric W. "ガンマ関数" MathWorld — Wolfram Webリソースより