##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::erfc

From cppreference.com
< cpp‎ | numeric‎ | math

Defined in header `<cmath>` |  |
float erfc( float arg ); | (1) | (since C++11)
double erfc( double arg ); | (2) | (since C++11)
long double erfc( long double arg ); | (3) | (since C++11)
double erfc( Integral arg ); | (4) | (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).

### [edit] Parameters

arg | - | value of a floating-point or Integral type

### [edit] Return value

If no errors occur, value of the complementary error function of `arg`, that is

2
√π

∫∞
arg e-t2
dt or 1-erf(arg), is returned.

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

### [edit] Notes

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

### [edit] Example

Run this code

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    double normalCDF(double x) // Phi(-∞, x) aka N(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) 53.98%
    normalCDF(0.20) 57.93%
    normalCDF(0.30) 61.79%
    normalCDF(0.40) 65.54%
    normalCDF(0.50) 69.15%
    normalCDF(0.60) 72.57%
    normalCDF(0.70) 75.80%
    normalCDF(0.80) 78.81%
    normalCDF(0.90) 81.59%
    normalCDF(1.00) 84.13%
    special values:
    erfc(-Inf) = 2.00
    erfc(Inf) = 0.00

### [edit] See also

erf (C++11) | error function (function) [edit]
C documentation for erfc

### [edit] External links

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

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/numeric/math/erfc&oldid=73571"