public static double Erfc(double a)
{
double x, y, z, p, q;
if (a < 0.0) x = -a;
else x = a;
if (x < 1.0) return 1.0 - Erf(a);
z = -a*a;
if (z < -MAXLOG)
{
if (a < 0) return (2.0);
else return (0.0);
}
z = 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, ERC_S, 6);
}
y = (z*p)/q;
if (a < 0) y = 2.0 - y;
if (y == 0.0)
{
if (a < 0) return 2.0;
else return (0.0);
}
return y;
}