std::erf, std::erff, std::erfl
From cppreference.com
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float erf ( float num ); double erf ( double num ); |
(C++23まで) | |
| /*浮動小数点数型*/ erf ( /*浮動小数点型*/ num ); |
(C++23から) (C++26 以降 constexpr) |
|
float erff( float num ); |
(2) | (C++11以降) (C++26 以降 constexpr) |
long double erfl( 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 erf ( Integer num ); |
(A) | (C++26 以降 constexpr) |
|
S) SIMDオーバーロードは、v_numに対して要素ごとの
std::erfを実行します。
|
(C++26以降) |
|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| num | - | 浮動小数点数または整数値 |
[編集] 戻り値
エラーが発生しなかった場合、numの誤差関数の値、すなわち| 2 |
| √π |
0e-t2
dtが返されます。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)すなわち
| 2*num |
| √π |
[編集] エラー処理
エラーは math_errhandling で指定された通りに報告される。
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- 引数が±0の場合、±0が返されます。
- 引数が±∞の場合、±1が返されます。
- 引数が NaN の場合、NaN が返されます。
[編集] 注記
アンダーフローは、|num| < DBL_MIN * (std::sqrt(π) / 2)の場合に保証されます。
erf(| x |
| σ√2 |
追加のオーバーロードは、(A)とまったく同じように提供される必要はありません。整数型の引数numに対して、std::erf(num)がstd::erf(static_cast<double>(num))と同じ効果を持つことを保証するのに十分であればよいのです。
[編集] 例
以下の例は、正規分布変数がある区間(x1, x2)に入る確率を計算します。
このコードを実行
#include <cmath> #include <iomanip> #include <iostream> double phi(double x1, double x2) { return (std::erf(x2 / std::sqrt(2)) - std::erf(x1 / std::sqrt(2))) / 2; } int main() { std::cout << "Normal variate probabilities:\n" << std::fixed << std::setprecision(2); for (int n = -4; n < 4; ++n) std::cout << '[' << std::setw(2) << n << ':' << std::setw(2) << n + 1 << "]: " << std::setw(5) << 100 * phi(n, n + 1) << "%\n"; std::cout << "Special values:\n" << "erf(-0) = " << std::erf(-0.0) << '\n' << "erf(Inf) = " << std::erf(INFINITY) << '\n'; }
出力
Normal variate probabilities: [-4:-3]: 0.13% [-3:-2]: 2.14% [-2:-1]: 13.59% [-1: 0]: 34.13% [ 0: 1]: 34.13% [ 1: 2]: 13.59% [ 2: 3]: 2.14% [ 3: 4]: 0.13% Special values: erf(-0) = -0.00 erf(Inf) = 1.00
[編集] 関連項目
| (C++11)(C++11)(C++11) |
相補誤差関数 (関数) |
| C言語のドキュメント for erf
| |
[編集] 外部リンク
| Weisstein, Eric W. "Erf." From MathWorld — A Wolfram Web Resource. |