erfc, erfcf, erfcl

From cppreference.com
< clrm; | numericlrm; | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
Exponential functions
(C99)
(C99)
(C99)
(C99)
Power functions
(C99)
(C99)
Trigonometric and hyperbolic functions
(C99)
(C99)
(C99)
Error and gamma functions
(C99)
erfc
(C99)
(C99)
(C99)
Nearest integer floating point operations
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
Floating point manipulation functions
(C99)(C99)
(C99)
(C99)
Classification
(C99)
(C99)
(C99)
Types
(C99)(C99)
Macro constants
Defined in header <math.h>
float erfcf( float arg );
(1) (since C99)
double erfc( double arg );
(2) (since C99)
long double erfcl( long double arg );
(3) (since C99)
Defined in header <tgmath.h>
#define erfc( arg )
(4) (since C99)
1-3) Computes the complementary error function of arg, that is 1.0-erf(arg), but without loss of precision for large arg.
4) Type-generic macro: If arg has type long double, erfcl is called. Otherwise, if arg has integer type or the type double, erfc is called. Otherwise, erfcf is called.

Parameters

arg - floating point value

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.

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 <stdio.h>
#include <math.h>

double normalCDF(double x) // Phi(-, x) aka N(x)
{
    return erfc(-x/sqrt(2))/2;
}
int main(void)
{
    puts("normal cumulative distribution function:");
    for(double n=0; n<1; n+=0.1)
        printf("normalCDF(%.2f)%5.2f%%\n", n, 100*normalCDF(n));

    puts("special values:");
    printf("erfc(-Inf) =%f\n", erfc(-INFINITY));
    printf("erfc(Inf) =%f\n", erfc(INFINITY));
}

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.000000
erfc(Inf) = 0.000000

References

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.8.2 The erfc functions (p: 249-250)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.5.2 The erfc functions (p: 525)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.8.2 The erfc functions (p: 230)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.5.2 The erfc functions (p: 462)

See also

(C99)(C99)(C99)
computes error function
(function)

External links

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