Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/numeric/math/erf"

From cppreference.com
< cpp‎ | numeric‎ | math
m (fmt)
m (., fmt, "" -> '')
 
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{cpp/title|erf}}
+
{{cpp/title|erf|erff|erfl}}
 
{{cpp/numeric/math/navbar}}
 
{{cpp/numeric/math/navbar}}
{{dcl begin}}
+
{{cpp/numeric/math/declarations
{{dcl header | cmath}}
+
|family=erf
{{dcl | since=c++11 |num=1|
+
|param1=num
float      erf( float arg );
+
|constexpr_since=26
 +
|desc=Computes the {{enwiki|Error function|error function}} of {{c|num}}.
 
}}
 
}}
{{dcl | since=c++11 |num=2|
 
double      erf( double arg );
 
}}
 
{{dcl | since=c++11 |num=3|
 
long double erf( long double arg );
 
}}
 
{{dcl | since=c++11 |num=4|
 
double      erf( Integral arg );
 
}}
 
{{dcl end}}
 
 
@1-3@ Computes the [[enwiki:Error function|error function]] of {{tt|arg}}.
 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).
 
  
 
===Parameters===
 
===Parameters===
 
{{par begin}}
 
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
+
{{par|num|floating-point or integer value}}
 
{{par end}}
 
{{par end}}
  
 
===Return value===
 
===Return value===
If no errors occur, value of the error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&pi;}}}}{{minteg|0|arg|{{mexp|-t{{su|p=2}}}}d''t''}}}}, is returned.
+
If no errors occur, value of the error function of {{c|num}}, that is {{mathjax-or|\(\frac{2}{\sqrt{\pi} }\int_{0}^{num}{e^{-{t^2} }\mathsf{d}t}\)|{{mfrac|2|{{mrad|&pi;}}}}{{minteg|0|num|{{mexp|-t{{su|p=2}}}}d''t''}}}}, is returned.<br><!-- a blank line does not work here -->
 
+
If a range error occurs due to underflow, the correct result (after rounding), that is {{mathjax-or|\(\frac{2\cdot num}{\sqrt{\pi} }\)|{{mfrac|2*num|{{mrad|&pi;}}}}}} is returned.
 
+
If a range error occurs due to underflow, the correct result (after rounding), that is {{math|{{mfrac|2*arg|{{mrad|&pi;}}}}}} is returned
+
  
 
===Error handling===
 
===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]
+
Errors are reported as specified in {{lc|math_errhandling}}.
  
 
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
 
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, ±0 is returned
+
* If the argument is ±0, ±0 is returned.
* If the argument is ±∞, ±1 is returned
+
* If the argument is ±∞, ±1 is returned.
* If the argument is NaN, NaN is returned
+
* If the argument is NaN, NaN is returned.
  
 
===Notes===
 
===Notes===
Underflow is guaranteed if {{c|{{!}}arg{{!}} < DBL_MIN*(sqrt(π)/2)}}
+
Underflow is guaranteed if {{c|{{!}}num{{!}} < DBL_MIN * (std::sqrt(π) / 2)}}.
  
{{math|erf({{mfrac|x|&sigma;{{mrad|2}}}})}} is the probability that a measurement whose errors are subject to a normal distribution with standard deviation {{math|&sigma;}} is less than {{math|x}} away from the mean value.
+
{{mathjax-or|\(\operatorname{erf}(\frac{x}{\sigma \sqrt{2} })\)|erf({{mfrac|x|&sigma;{{mrad|2}}}})}} is the probability that a measurement whose errors are subject to a normal distribution with standard deviation {{mathjax-or|\(\sigma\)|&sigma;}} is less than {{mathjax-or|\(x\)|x}} away from the mean value.
 +
 
 +
{{cpp/numeric/math/additional integer overload note|erf}}
  
 
===Example===
 
===Example===
 
{{example
 
{{example
| The following example calculates the probability that a normal variate is on the interval (x1, x2)
+
|The following example calculates the probability that a normal variate is on the interval (x1, x2):
| code=
+
|code=
#include <iostream>
+
 
#include <cmath>
 
#include <cmath>
 
#include <iomanip>
 
#include <iomanip>
 +
#include <iostream>
 +
 
double phi(double x1, double x2)
 
double phi(double x1, double x2)
 
{
 
{
     return (std::erf(x2/std::sqrt(2)) - std::erf(x1/std::sqrt(2)))/2;
+
     return (std::erf(x2 / std::sqrt(2)) - std::erf(x1 / std::sqrt(2))) / 2;
 
}
 
}
 +
 
int main()
 
int main()
 
{
 
{
     std::cout << "normal variate probabilities:\n"
+
     std::cout << "Normal variate probabilities:\n"
 
               << std::fixed << std::setprecision(2);
 
               << std::fixed << std::setprecision(2);
     for(int n=-4; n<4; ++n)
+
     for (int n = -4; n < 4; ++n)
         std::cout << "[" << std::setw(2) << n << ":" << std::setw(2) << n+1 << "]: "
+
         std::cout << '[' << std::setw(2) << n
                   << std::setw(5) << 100*phi(n, n+1) << "%\n";
+
                  << ':' << std::setw(2) << n + 1 << "]: "
 
+
                   << std::setw(5) << 100 * phi(n, n + 1) << "%\n";
     std::cout << "special values:\n"
+
   
 +
     std::cout << "Special values:\n"
 
               << "erf(-0) = " << std::erf(-0.0) << '\n'
 
               << "erf(-0) = " << std::erf(-0.0) << '\n'
 
               << "erf(Inf) = " << std::erf(INFINITY) << '\n';
 
               << "erf(Inf) = " << std::erf(INFINITY) << '\n';
 
}
 
}
| output=
+
|output=
normal variate probabilities:
+
Normal variate probabilities:
 
[-4:-3]:  0.13%
 
[-4:-3]:  0.13%
 
[-3:-2]:  2.14%
 
[-3:-2]:  2.14%
Line 77: Line 68:
 
[ 2: 3]:  2.14%
 
[ 2: 3]:  2.14%
 
[ 3: 4]:  0.13%
 
[ 3: 4]:  0.13%
special values:
+
Special values:
 
erf(-0) = -0.00
 
erf(-0) = -0.00
 
erf(Inf) = 1.00
 
erf(Inf) = 1.00
Line 84: Line 75:
 
===See also===
 
===See also===
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc erfc}}
+
{{dsc inc|cpp/numeric/math/dsc erfc}}
{{dsc see c | c/numeric/math/erf}}
+
{{dsc see c|c/numeric/math/erf}}
 
{{dsc end}}
 
{{dsc end}}
  
 
===External links===
 
===External links===
[http://mathworld.wolfram.com/Erf.html Weisstein, Eric W. "Erf."] From MathWorld--A Wolfram Web Resource.
+
{{eli|[https://mathworld.wolfram.com/Erf.html Weisstein, Eric W. "Erf."] From MathWorld &mdash; A Wolfram Web Resource.}}
  
[[de:cpp/numeric/math/erf]]
+
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}
[[es:cpp/numeric/math/erf]]
+
[[fr:cpp/numeric/math/erf]]
+
[[it:cpp/numeric/math/erf]]
+
[[ja:cpp/numeric/math/erf]]
+
[[pt:cpp/numeric/math/erf]]
+
[[ru:cpp/numeric/math/erf]]
+
[[zh:cpp/numeric/math/erf]]
+

Latest revision as of 08:49, 15 October 2023

 
 
 
 
Defined in header <cmath>
(1)
float       erf ( float num );

double      erf ( double num );

long double erf ( long double num );
(until C++23)
/* floating-point-type */
            erf ( /* floating-point-type */ num );
(since C++23)
(constexpr since C++26)
float       erff( float num );
(2) (since C++11)
(constexpr since C++26)
long double erfl( long double num );
(3) (since C++11)
(constexpr since C++26)
Additional overloads (since C++11)
Defined in header <cmath>
template< class Integer >
double      erf ( Integer num );
(A) (constexpr since C++26)
1-3) Computes the error function of num. The library provides overloads of std::erf for all cv-unqualified floating-point types as the type of the parameter.(since C++23)
A) Additional overloads are provided for all integer types, which are treated as double.
(since C++11)

Contents

[edit] Parameters

num - floating-point or integer value

[edit] Return value

If no errors occur, value of the error function of num, that is
2
π
num0e-t2dt
, is returned.
If a range error occurs due to underflow, the correct result (after rounding), that is
2*num
π
is returned.

[edit] Error handling

Errors are reported as specified in math_errhandling.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),

  • If the argument is ±0, ±0 is returned.
  • If the argument is ±∞, ±1 is returned.
  • If the argument is NaN, NaN is returned.

[edit] Notes

Underflow is guaranteed if |num| < DBL_MIN * (std::sqrt(π) / 2).

erf(
x
σ2
)
is the probability that a measurement whose errors are subject to a normal distribution with standard deviation σ is less than x away from the mean value.

The additional overloads are not required to be provided exactly as (A). They only need to be sufficient to ensure that for their argument num of integer type, std::erf(num) has the same effect as std::erf(static_cast<double>(num)).

[edit] Example

The following example calculates the probability that a normal variate is on the interval (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';
}

Output:

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

[edit] See also

(C++11)(C++11)(C++11)
complementary error function
(function) [edit]

[edit] External links

Weisstein, Eric W. "Erf." From MathWorld — A Wolfram Web Resource.