public static MultiPrecision <N> Erfc(MultiPrecision <N> x)
        {
            if (x.IsZero)
            {
                return(1);
            }
            if (x.IsNaN)
            {
                return(NaN);
            }
            if (!x.IsFinite)
            {
                return(x.Sign == Sign.Plus ? 0 : 2);
            }
            if (x.Sign == Sign.Minus)
            {
                return(1 + Erf(Abs(x)));
            }

            if (x.Exponent < Consts.Erf.ExponentThreshold)
            {
                MultiPrecision <Plus4 <Plus4 <N> > > y =
                    MultiPrecision <Plus4 <N> > .ErfTaylorSeriesApprox(x.Convert <Plus4 <N> >());

                return((1 - y).Convert <N>());
            }
            else
            {
                long n = ErfcConvergenceTable.N(Bits, (double)x);
                MultiPrecision <Plus4 <N> > y = ErfcContinueFractionalApprox(x, n);

                return(y.Convert <N>());
            }
        }