Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | numeric‎ | math
m (+ link to C documentation)
(+detail, borrow special values from C for the example)
Line 3: Line 3:
 
{{dcl begin}}
 
{{dcl begin}}
 
{{dcl header | cmath}}
 
{{dcl header | cmath}}
{{dcl | since=c++11 |
+
{{dcl | since=c++11 |num=1|
 
float      erf( float arg );
 
float      erf( float arg );
 
}}
 
}}
{{dcl | since=c++11 |
+
{{dcl | since=c++11 |num=2|
 
double      erf( double arg );
 
double      erf( double arg );
 
}}
 
}}
{{dcl | since=c++11 |
+
{{dcl | since=c++11 |num=3|
 
long double erf( long double arg );
 
long double erf( long double arg );
 
}}
 
}}
{{dcl | since=c++11 |
+
{{dcl | since=c++11 |num=4|
 
double      erf( Integral arg );
 
double      erf( Integral arg );
 
}}
 
}}
 
{{dcl end}}
 
{{dcl end}}
  
Computes the [[enwiki:Error function|error function]] of {{tt|arg}}.
+
@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===
Line 25: Line 26:
  
 
===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.
  
The 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''}}}}.
+
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===
 +
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|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
  
 
===Example===
 
===Example===
Line 46: Line 56:
 
                   << std::setw(5) << std::fixed << std::setprecision(2)
 
                   << std::setw(5) << std::fixed << std::setprecision(2)
 
                   << 100*phi(n, n+1) << "%\n";
 
                   << 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=
 
  | output=
Line 57: Line 71:
 
[ 2: 3]:  2.14%
 
[ 2: 3]:  2.14%
 
[ 3: 4]:  0.13%
 
[ 3: 4]:  0.13%
 +
special values:
 +
erf(-0) = -0.00
 +
erf(Inf) = 1.00
 
}}
 
}}
 
  
 
===See also===
 
===See also===
 
 
{{dsc begin}}
 
{{dsc begin}}
 
{{dsc inc | cpp/numeric/math/dsc erfc}}
 
{{dsc inc | cpp/numeric/math/dsc erfc}}

Revision as of 21:01, 6 June 2014

 
 
 
 
Defined in header <cmath>
float       erf( float arg );
(1) (since C++11)
double      erf( double arg );
(2) (since C++11)
long double erf( long double arg );
(3) (since C++11)
double      erf( Integral arg );
(4) (since C++11)
1-3) Computes the error function of arg.
4) A set of overloads or a function template accepting an argument of any integral type. Equivalent to 2) (the argument is cast to double).

Contents

Parameters

arg - value of a floating-point or Integral type

Return value

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

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

Example

The following example calculates the probability that a normal variate is on the interval (x1, x2)

#include <iostream>
#include <cmath>
#include <iomanip>
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";
    for(int n=-4; n<4; ++n)
        std::cout << "[" << std::setw(2) << n << ":" << std::setw(2) << n+1 << "]: "
                  << std::setw(5) << std::fixed << std::setprecision(2)
                  << 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

See also

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

External links

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