Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | numeric‎ | math
m (+ link to C documentation)
(detail, example)
Line 17: Line 17:
 
{{dcl end}}
 
{{dcl end}}
  
Computes the [[enwiki:Complementary error function|complementary error function]] of {{tt|arg}}.
+
@1-3@ Computes the [[enwiki:Complementary error function|complementary error function]] of {{tt|arg}}, that is {{tt|1.0-erf(arg)}}, but without loss of precision for large {{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 complementary error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&pi;}}}}{{minteg|arg|∞|{{mexp|-t{{su|p=2}}}}d''t''}}}} or {{math|1-erf(arg)}}, is returned.
  
The value of the complementary error function of {{tt|arg}}, that is {{c|1-std::erf(arg)}}.
+
If a range error occurs due to underflow, the correct result (after rounding) is returned
  
===See also===
+
===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 is returned
 +
* If the argument is -∞, 2 is returned
 +
* If the argument is NaN, NaN is returned
 +
 +
===Notes===
 +
For the IEEE-compatible type {{tt|double}}, underflow is guaranteed if {{tt|arg}} > 26.55.
 +
 +
===Example===
 +
{{example|code=
 +
#include <iostream>
 +
#include <cmath>
 +
#include <iomanip>
 +
double normalCDF(double x)
 +
{
 +
    return std::erfc(-x*std::sqrt(2))/2;
 +
}
 +
int main()
 +
{
 +
    std::cout << "normal cumulative distribution function:\n"
 +
              << std::fixed << std::setprecision(2);
 +
    for(double n=0; n<1; n+=0.1)
 +
        std::cout << "normalCDF(" << n << ") " << 100*normalCDF(n) << "%\n";
 +
 +
    std::cout << "special values:\n"
 +
              << "erfc(-Inf) = " << std::erfc(-INFINITY) << '\n'
 +
              << "erfc(Inf) = " << std::erfc(INFINITY) << '\n';
 +
}
 +
|output=
 +
normal cumulative distribution function:
 +
normalCDF(0.00) 50.00%
 +
normalCDF(0.10) 57.93%
 +
normalCDF(0.20) 65.54%
 +
normalCDF(0.30) 72.57%
 +
normalCDF(0.40) 78.81%
 +
normalCDF(0.50) 84.13%
 +
normalCDF(0.60) 88.49%
 +
normalCDF(0.70) 91.92%
 +
normalCDF(0.80) 94.52%
 +
normalCDF(0.90) 96.41%
 +
normalCDF(1.00) 97.72%
 +
special values:
 +
erfc(-Inf) = 2.00
 +
erfc(Inf) = 0.00
 +
}}
 +
 +
===See also===
 
{{dsc begin}}
 
{{dsc begin}}
 
{{dsc inc | cpp/numeric/math/dsc erf}}
 
{{dsc inc | cpp/numeric/math/dsc erf}}

Revision as of 22:01, 6 June 2014

 
 
 
 
Defined in header <cmath>
float       erfc( float arg );
(since C++11)
double      erfc( double arg );
(since C++11)
long double erfc( long double arg );
(since C++11)
double      erfc( Integral arg );
(since C++11)
1-3) Computes the complementary error function of arg, that is 1.0-erf(arg), but without loss of precision for large 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 complementary error function of arg, that is
2
π
∞arge-t2dt
or 1-erf(arg), is returned.

If a range error occurs due to underflow, the correct result (after rounding) 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 is returned
  • If the argument is -∞, 2 is returned
  • If the argument is NaN, NaN is returned

Notes

For the IEEE-compatible type double, underflow is guaranteed if arg > 26.55.

Example

#include <iostream>
#include <cmath>
#include <iomanip>
double normalCDF(double x)
{
    return std::erfc(-x*std::sqrt(2))/2;
}
int main()
{
    std::cout << "normal cumulative distribution function:\n"
              << std::fixed << std::setprecision(2);
    for(double n=0; n<1; n+=0.1)
        std::cout << "normalCDF(" << n << ") " << 100*normalCDF(n) << "%\n";
 
    std::cout << "special values:\n"
              << "erfc(-Inf) = " << std::erfc(-INFINITY) << '\n'
              << "erfc(Inf) = " << std::erfc(INFINITY) << '\n';
}

Output:

normal cumulative distribution function:
normalCDF(0.00) 50.00%
normalCDF(0.10) 57.93%
normalCDF(0.20) 65.54%
normalCDF(0.30) 72.57%
normalCDF(0.40) 78.81%
normalCDF(0.50) 84.13%
normalCDF(0.60) 88.49%
normalCDF(0.70) 91.92%
normalCDF(0.80) 94.52%
normalCDF(0.90) 96.41%
normalCDF(1.00) 97.72%
special values:
erfc(-Inf) = 2.00
erfc(Inf) = 0.00

See also

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

External links

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