std::erf, std::erff, std::erfl
Определено в заголовочном файле <cmath> | ||
|---|---|---|
float erf ( float num ); double erf ( double num ); long double erf ( long double num ); | (1) | (до 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) |
| Перегрузка SIMD (начиная с C++26) | ||
Определено в заголовочном файле <simd> | ||
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
erf ( const V& v_num );
| (S) | (начиная с C++26) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определено в заголовочном файле <cmath> | ||
template< class Integer > double erf ( Integer num ); | (A) | (constexpr начиная с C++26) |
num. Библиотека предоставляет перегрузки std::erf для всех не cv-квалифицированных типов с плавающей точкой в качестве типа параметра.(начиная с C++23)
S) Перегрузка SIMD выполняет поэлементное std::erf над v_num. (Определения см. в разделах math-floating-point и deduced-simd-t.) | (начиная с C++26) |
| A) Предоставляются дополнительные перегрузки для всех целочисленных типов; они обрабатываются как double. | (начиная с C++11) |
Параметры
| num | - | значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
Если ошибок не возникает, возвращается значение функции ошибок от num, то есть {{mathjax-or|\(\frac{2}{\sqrt{\pi} }\int_{0}^{num}{e^{-{t^2} }\mathsf{d}t}\)|
∫num0e-t2dt}},.
Если возникает ошибка диапазона из-за потери значимости, возвращается правильный результат (после округления), то есть \(\frac{2\cdot num}{\sqrt{\pi} }\)
.
Обработка ошибок
Об ошибках сообщается в соответствии с 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
См. также
|
(C++11)(C++11)(C++11) | дополнительная функция ошибок (функция) |
Документация C для erf |
|
Внешние ссылки
| Weisstein, Eric W. «Erf». Из MathWorld — веб-ресурса Wolfram. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/erf