Spec-Zone.ru › C++

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

Определено в заголовке <cmath>
(1)
float       erf ( float num );
double      erf ( double num );
long double erf ( long double num );
(до C++23)
/* floating-point-type */
            erf ( /* floating-point-type */ num );
(с C++23)
(constexpr с C++26)
float       erff( float num );
(2) (с C++11)
(constexpr с C++26)
long double erfl( long double num );
(3) (с C++11)
(constexpr с C++26)
Дополнительные перегрузки (с C++11)
Определено в заголовке <cmath>
template< class Integer >
double      erf ( Integer num );
(A) (constexpr с C++26)
1-3) Вычисляет функцию ошибки от num. Библиотека предоставляет перегрузки std::erf для всех типов с плавающей точкой без квалификаторов cv, как тип параметра.(с C++23)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double. (с C++11)

Параметры

num - значение с плавающей точкой или целое число

Возвращаемое значение

Если ошибок не произошло, возвращается значение функции ошибки от num, то есть \(\frac{2}{\sqrt{\pi} }\int_{0}^{num}{e^{-{t^2} }\mathsf{d}t}\)2/√π∫num0e-t2dt.
Если происходит ошибка диапазона из-за недолива, возвращается корректный результат (после округления), то есть \(\frac{2\cdot num}{\sqrt{\pi} }\)2*num/√π.

Обработка ошибок

Ошибки сообщаются в соответствии с math_errhandling.

Если реализация поддерживает IEEE арифметику с плавающей точкой (IEC 60559),

  • Если аргумент равен ±0, возвращается ±0.
  • Если аргумент равен ±∞, возвращается ±1.
  • Если аргумент равен NaN, возвращается NaN.

Примечания

Недолив гарантирован, если |num| < DBL_MIN * (std::sqrt(π) / 2). \(\operatorname{erf}(\frac{x}{\sigma \sqrt{2} })\)erf(

x/σ√2) — вероятность того, что измерение, ошибки которого подчиняются нормальному распределению со стандартным отклонением \(\sigma\)σ, находится менее чем на \(x\)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

См. также

erfcerfcferfcl
(C++11)(C++11)(C++11)
дополнительная функция ошибки
(функция)
Документация на C для erf

Внешние ссылки

Weisstein, Eric W. "Erf." Из MathWorld — Wolfram Web Resource.

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/erf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API