◐ Shell
clean mode source ↗

std::erfc, std::erfcf, std::erfcl - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <cmath>

float erfc ( float arg ); float erfcf( float arg );

(1) (desde C++11)

double erfc ( double arg );

(2) (desde C++11)

long double erfc ( long double arg ); long double erfcl( long double arg );

(3) (desde C++11)

double erfc ( TipoEntero arg );

(4) (desde C++11)

1-3) Calcula la función error complementaria de arg, es decir, 1.0-erf(arg), pero sin la pérdida de precisión para un arg muy grande.

4) Un conjunto de sobrecargas o una plantilla de función que acepta un argumento de cualquier tipo entero. Equivalente a (2) (el argumento se convierte a double).

Parámetros

arg - Valor de un tipo de punto flotante o un tipo entero.

Valor de retorno

Si no se producen errores, se devuelve el valor de la función error complementaria de arg, es decir, {{mathjax-or|\(\frac{2}{\sqrt{\pi} }\int_{arg}^{\infty}{e^{-{t^2} }\mathsf{d}t}\)|


arg
e-t2
dt}} o 1-erf(arg).

Si se produce un error de rango debido a subdesbordamiento, se devuelve el resultado correcto (después del redondeo).

Manejo de errores

Los errores se informan como se especifica en math_errhandling.

Si la implementación admite la aritmética de punto flotante IEEE (IEC 60559):

  • Si el argumento es +∞, se devuelve +0.
  • Si el argumento es -∞, se devuelve 2.
  • Si el argumento es NaN, se devuelve NaN.

Notas

Para el tipo double compatible con IEEE, se garantiza el subdesbordamiento si arg > 26.55.

Ejemplo

#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 << "función de distribución acumulativa normal:\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 << "valores especiales:\n"
              << "erfc(-Inf) = " << std::erfc(-INFINITY) << '\n'
              << "erfc(Inf) = " << std::erfc(INFINITY) << '\n';
}

Salida:

función de distribución acumulativa normal:
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%
valores especiales:
erfc(-Inf) = 2.00
erfc(Inf) = 0.00

Véase también

Enlaces externos

Weisstein, Eric W. "Erfc." De MathWorld – Un recurso web de Wolfram.