名前空間
変種
操作

std::erf, std::erff, std::erfl

From cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
 
ヘッダー <cmath> で定義
(1)
float        erf ( float num );

double      erf ( double num );

long double erf ( long 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> で定義
template< /*math-floating-point*/ V >

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

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

目次

[編集] パラメータ

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

[編集] 戻り値

エラーが発生しなかった場合、numの誤差関数の値、すなわち
2
π
num
0
e-t2
dt
が返されます。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)すなわち
2*num
π
が返されます。

[編集] エラー処理

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

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

  • 引数が±0の場合、±0が返されます。
  • 引数が±∞の場合、±1が返されます。
  • 引数が NaN の場合、NaN が返されます。

[編集] 注記

アンダーフローは、|num| < DBL_MIN * (std::sqrt(π) / 2)の場合に保証されます。

erf(
x
σ2
)
は、標準偏差σの正規分布に従う誤差を持つ測定値が、平均値からxよりも小さい範囲にある確率です。

追加のオーバーロードは、(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)
相補誤差関数
(関数) [編集]

[編集] 外部リンク

Weisstein, Eric W. "Erf." From MathWorld — A Wolfram Web Resource.
English 日本語 中文(简体) 中文(繁體)