Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | numeric‎ | math
m (Text replace - "{{mark c++11 feature}}" to "{{mark since c++11}}")
m (.)
 
(21 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{cpp/title|erfc}}
+
{{cpp/title|erfc|erfcf|erfcl}}
{{cpp/numeric/math/sidebar}}
+
{{cpp/numeric/math/navbar}}
{{ddcl list begin}}
+
{{cpp/numeric/math/declarations
{{ddcl list header | cmath}}
+
|family=erfc
{{ddcl list item | notes={{mark since c++11}} |
+
|param1=num
float      erfc( float arg );
+
|constexpr_since=26
 +
|desc=Computes the {{enwiki|Complementary error function|complementary error function}} of {{c|num}}, that is {{c|1.0 - std::erf(num)}}, but without loss of precision for large {{c|num}}.
 
}}
 
}}
{{ddcl list item | notes={{mark since c++11}} |
 
double      erfc( double arg );
 
}}
 
{{ddcl list item | notes={{mark since c++11}} |
 
long double erfc( long double arg );
 
}}
 
{{ddcl list end}}
 
 
Computes the [[enwiki:Complementary error function|complementary error function]] of {{tt|arg}}.
 
  
 
===Parameters===
 
===Parameters===
{{param list begin}}
+
{{par begin}}
{{param list item | arg | floating point value}}
+
{{par|num|floating-point or integer value}}
{{param list end}}
+
{{par end}}
  
 
===Return value===
 
===Return value===
 +
If no errors occur, value of the complementary error function of {{c|num}}, that is {{mathjax-or|\(\frac{2}{\sqrt{\pi} }\int_{num}^{\infty}{e^{-{t^2} }\mathsf{d}t}\)|{{mfrac|2|{{mrad|&pi;}}}}{{minteg|num|∞|{{mexp|-t{{su|p=2}}}}d''t''}}}} or {{mathjax-or|\({\small 1-\operatorname{erf}(num)}\)|1-erf(num)}}, is returned.
  
The value of the complementary error function of {{tt|arg}}, that is {{cpp|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 {{lc|math_errhandling}}.
  
{{dcl list begin}}
+
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
{{dcl list template | cpp/numeric/math/dcl list erf}}
+
* If the argument is +∞, +0 is returned.
{{dcl list end}}
+
* If the argument is -∞, 2 is returned.
 +
* If the argument is NaN, NaN is returned.
 +
 
 +
===Notes===
 +
For the IEEE-compatible type {{c/core|double}}, underflow is guaranteed if {{c|num > 26.55}}.
 +
 
 +
{{cpp/numeric/math/additional integer overload note|erfc}}
 +
 
 +
===Example===
 +
{{example
 +
|code=
 +
#include <cmath>
 +
#include <iomanip>
 +
#include <iostream>
 +
 
 +
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
 +
}}
 +
 
 +
===See also===
 +
{{dsc begin}}
 +
{{dsc inc|cpp/numeric/math/dsc erf}}
 +
{{dsc see c|c/numeric/math/erfc}}
 +
{{dsc end}}
  
 
===External links===
 
===External links===
[http://mathworld.wolfram.com/Erfc.html Weisstein, Eric W. "Erfc."] From MathWorld--A Wolfram Web Resource.
+
{{eli|[https://mathworld.wolfram.com/Erfc.html Weisstein, Eric W. "Erfc."] From MathWorld &mdash; A Wolfram Web Resource.}}
 +
 
 +
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 21:24, 15 October 2023

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

double      erfc ( double num );

long double erfc ( long double num );
(until C++23)
/* floating-point-type */
            erfc ( /* floating-point-type */ num );
(since C++23)
(constexpr since C++26)
float       erfcf( float num );
(2) (since C++11)
(constexpr since C++26)
long double erfcl( long double num );
(3) (since C++11)
(constexpr since C++26)
Additional overloads (since C++11)
Defined in header <cmath>
template< class Integer >
double      erfc ( Integer num );
(A) (constexpr since C++26)
1-3) Computes the complementary error function of num, that is 1.0 - std::erf(num), but without loss of precision for large num. The library provides overloads of std::erfc 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 complementary error function of num, that is
2
π
∞nume-t2dt
or 1-erf(num), 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 num > 26.55.

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::erfc(num) has the same effect as std::erfc(static_cast<double>(num)).

[edit] Example

#include <cmath>
#include <iomanip>
#include <iostream>
 
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

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

[edit] External links

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