std::tgamma, std::tgammaf, std::tgammal
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float tgamma ( float num ); double tgamma ( double num ); |
(C++23まで) | |
| /*浮動小数点数型*/ tgamma ( /*浮動小数点数型*/ num ); |
(C++23から) (C++26 以降 constexpr) |
|
float tgammaf( float num ); |
(2) | (C++11以降) (C++26 以降 constexpr) |
long double tgammal( long double num ); |
(3) | (C++11以降) (C++26 以降 constexpr) |
| SIMDオーバーロード (C++26以降) |
||
| ヘッダー <simd> で定義 |
||
| template< /*math-floating-point*/ V > constexpr /*deduced-simd-t*/<V> |
(S) | (C++26以降) |
| 追加のオーバーロード (C++11以降) |
||
| ヘッダー <cmath> で定義 |
||
template< class Integer > double tgamma ( Integer num ); |
(A) | (C++26 以降 constexpr) |
std::tgammaのオーバーロードを提供します。(C++23以降)|
S) SIMDオーバーロードは、v_numに対して要素ごとの
std::tgammaを実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| num | - | 浮動小数点数または整数値 |
[編集] 戻り値
エラーが発生しなかった場合、numのガンマ関数の値、つまり∫∞
0tnum-1
e-t dtが返されます。
ドメインエラーが発生した場合、実装定義の値(サポートされていれば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'; // special values std::cout << "tgamma(1) = " << std::tgamma(1) << '\n' << "tgamma(+Inf) = " << std::tgamma(INFINITY) << '\n'; // error handling 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) |
ベータ関数 (関数) |
| Cドキュメント(tgamma)
| |
[編集] 外部リンク
| Weisstein, Eric W. "Gamma Function." MathWorld — A Wolfram Web Resourceより。 |