public static double Erfc(double value)
{
double x, y, z, p, q;
if (value < 0.0)
x = -value;
else
x = value;
if (x < 1.0)
return 1.0 - Erf(value);
z = -value * value;
if (z < -Constants.LogMax)
{
if (value < 0)
return (2.0);
else
return (0.0);
}
z = System.Math.Exp(z);
if (x < 8.0)
{
p = Polevl(x, erfc_P, 8);
q = P1evl(x, erfc_Q, 8);
}
else
{
p = Polevl(x, erfc_R, 5);
q = P1evl(x, erfc_S, 6);
}
y = (z * p) / q;
if (value < 0)
y = 2.0 - y;
if (y == 0.0)
{
if (value < 0)
return 2.0;
else
return (0.0);
}
return y;
}