/* origin: FreeBSD /usr/src/lib/msun/src/s_erf.c */
/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */
/* double erf(double x)
 * double erfc(double x)
 *                           x
 *                    2      |\
 *     erf(x)  =  ---------  | exp(-t*t)dt
 *                 sqrt(pi) \|
 *                           0
 *
 *     erfc(x) =  1-erf(x)
 *  Note that
 *              erf(-x) = -erf(x)
 *              erfc(-x) = 2 - erfc(x)
 *
 * Method:
 *      1. For |x| in [0, 0.84375]
 *          erf(x)  = x + x*R(x^2)
 *          erfc(x) = 1 - erf(x)           if x in [-.84375,0.25]
 *                  = 0.5 + ((0.5-x)-x*R)  if x in [0.25,0.84375]
 *         where R = P/Q where P is an odd poly of degree 8 and
 *         Q is an odd poly of degree 10.
 *                                               -57.90
 *                      | R - (erf(x)-x)/x | <= 2
 *
 *
 *         Remark. The formula is derived by noting
 *          erf(x) = (2/sqrt(pi))*(x - x^3/3 + x^5/10 - x^7/42 + ....)
 *         and that
 *          2/sqrt(pi) = 1.128379167095512573896158903121545171688
 *         is close to one. The interval is chosen because the fix
 *         point of erf(x) is near 0.6174 (i.e., erf(x)=x when x is
 *         near 0.6174), and by some experiment, 0.84375 is chosen to
 *         guarantee the error is less than one ulp for erf.
 *
 *      2. For |x| in [0.84375,1.25], let s = |x| - 1, and
 *         c = 0.84506291151 rounded to single (24 bits)
 *              erf(x)  = sign(x) * (c  + P1(s)/Q1(s))
 *              erfc(x) = (1-c)  - P1(s)/Q1(s) if x > 0
 *                        1+(c+P1(s)/Q1(s))    if x < 0
 *              |P1/Q1 - (erf(|x|)-c)| <= 2**-59.06
 *         Remark: here we use the taylor series expansion at x=1.
 *              erf(1+s) = erf(1) + s*Poly(s)
 *                       = 0.845.. + P1(s)/Q1(s)
 *         That is, we use rational approximation to approximate
 *                      erf(1+s) - (c = (single)0.84506291151)
 *         Note that |P1/Q1|< 0.078 for x in [0.84375,1.25]
 *         where
 *              P1(s) = degree 6 poly in s
 *              Q1(s) = degree 6 poly in s
 *
 *      3. For x in [1.25,1/0.35(~2.857143)],
 *              erfc(x) = (1/x)*exp(-x*x-0.5625+R1/S1)
 *              erf(x)  = 1 - erfc(x)
 *         where
 *              R1(z) = degree 7 poly in z, (z=1/x^2)
 *              S1(z) = degree 8 poly in z
 *
 *      4. For x in [1/0.35,28]
 *              erfc(x) = (1/x)*exp(-x*x-0.5625+R2/S2) if x > 0
 *                      = 2.0 - (1/x)*exp(-x*x-0.5625+R2/S2) if -6<x<0
 *                      = 2.0 - tiny            (if x <= -6)
 *              erf(x)  = sign(x)*(1.0 - erfc(x)) if x < 6, else
 *              erf(x)  = sign(x)*(1.0 - tiny)
 *         where
 *              R2(z) = degree 6 poly in z, (z=1/x^2)
 *              S2(z) = degree 7 poly in z
 *
 *      Note1:
 *         To compute exp(-x*x-0.5625+R/S), let s be a single
 *         precision number and s := x; then
 *              -x*x = -s*s + (s-x)*(s+x)
 *              exp(-x*x-0.5626+R/S) =
 *                      exp(-s*s-0.5625)*exp((s-x)*(s+x)+R/S);
 *      Note2:
 *         Here 4 and 5 make use of the asymptotic series
 *                        exp(-x*x)
 *              erfc(x) ~ ---------- * ( 1 + Poly(1/x^2) )
 *                        x*sqrt(pi)
 *         We use rational approximation to approximate
 *              g(s)=f(1/x^2) = log(erfc(x)*x) - x*x + 0.5625
 *         Here is the error bound for R1/S1 and R2/S2
 *              |R1/S1 - f(x)|  < 2**(-62.57)
 *              |R2/S2 - f(x)|  < 2**(-61.52)
 *
 *      5. For inf > x >= 28
 *              erf(x)  = sign(x) *(1 - tiny)  (raise inexact)
 *              erfc(x) = tiny*tiny (raise underflow) if x > 0
 *                      = 2 - tiny if x<0
 *
 *      7. Special case:
 *              erf(0)  = 0, erf(inf)  = 1, erf(-inf) = -1,
 *              erfc(0) = 1, erfc(inf) = 0, erfc(-inf) = 2,
 *              erfc/erf(NaN) is NaN
 */

#include "libm.h"

static const double erx =
                        8.45062911510467529297e-01, /* 0x3FEB0AC1, 0x60000000 */
                                                    /*
                                                     * Coefficients for approximation to  erf on [0,0.84375]
                                                     */
    efx8 = 1.02703333676410069053e+00,              /* 0x3FF06EBA, 0x8214DB69 */
    pp0 = 1.28379167095512558561e-01,               /* 0x3FC06EBA, 0x8214DB68 */
    pp1 = -3.25042107247001499370e-01,              /* 0xBFD4CD7D, 0x691CB913 */
    pp2 = -2.84817495755985104766e-02,              /* 0xBF9D2A51, 0xDBD7194F */
    pp3 = -5.77027029648944159157e-03,              /* 0xBF77A291, 0x236668E4 */
    pp4 = -2.37630166566501626084e-05,              /* 0xBEF8EAD6, 0x120016AC */
    qq1 = 3.97917223959155352819e-01,               /* 0x3FD97779, 0xCDDADC09 */
    qq2 = 6.50222499887672944485e-02,               /* 0x3FB0A54C, 0x5536CEBA */
    qq3 = 5.08130628187576562776e-03,               /* 0x3F74D022, 0xC4D36B0F */
    qq4 = 1.32494738004321644526e-04,               /* 0x3F215DC9, 0x221C1A10 */
    qq5 = -3.96022827877536812320e-06,              /* 0xBED09C43, 0x42A26120 */
                                                    /*
                                                     * Coefficients for approximation to  erf  in [0.84375,1.25]
                                                     */
    pa0 = -2.36211856075265944077e-03,              /* 0xBF6359B8, 0xBEF77538 */
    pa1 = 4.14856118683748331666e-01,               /* 0x3FDA8D00, 0xAD92B34D */
    pa2 = -3.72207876035701323847e-01,              /* 0xBFD7D240, 0xFBB8C3F1 */
    pa3 = 3.18346619901161753674e-01,               /* 0x3FD45FCA, 0x805120E4 */
    pa4 = -1.10894694282396677476e-01,              /* 0xBFBC6398, 0x3D3E28EC */
    pa5 = 3.54783043256182359371e-02,               /* 0x3FA22A36, 0x599795EB */
    pa6 = -2.16637559486879084300e-03,              /* 0xBF61BF38, 0x0A96073F */
    qa1 = 1.06420880400844228286e-01,               /* 0x3FBB3E66, 0x18EEE323 */
    qa2 = 5.40397917702171048937e-01,               /* 0x3FE14AF0, 0x92EB6F33 */
    qa3 = 7.18286544141962662868e-02,               /* 0x3FB2635C, 0xD99FE9A7 */
    qa4 = 1.26171219808761642112e-01,               /* 0x3FC02660, 0xE763351F */
    qa5 = 1.36370839120290507362e-02,               /* 0x3F8BEDC2, 0x6B51DD1C */
    qa6 = 1.19844998467991074170e-02,               /* 0x3F888B54, 0x5735151D */
                                                    /*
                                                     * Coefficients for approximation to  erfc in [1.25,1/0.35]
                                                     */
    ra0 = -9.86494403484714822705e-03,              /* 0xBF843412, 0x600D6435 */
    ra1 = -6.93858572707181764372e-01,              /* 0xBFE63416, 0xE4BA7360 */
    ra2 = -1.05586262253232909814e+01,              /* 0xC0251E04, 0x41B0E726 */
    ra3 = -6.23753324503260060396e+01,              /* 0xC04F300A, 0xE4CBA38D */
    ra4 = -1.62396669462573470355e+02,              /* 0xC0644CB1, 0x84282266 */
    ra5 = -1.84605092906711035994e+02,              /* 0xC067135C, 0xEBCCABB2 */
    ra6 = -8.12874355063065934246e+01,              /* 0xC0545265, 0x57E4D2F2 */
    ra7 = -9.81432934416914548592e+00,              /* 0xC023A0EF, 0xC69AC25C */
    sa1 = 1.96512716674392571292e+01,               /* 0x4033A6B9, 0xBD707687 */
    sa2 = 1.37657754143519042600e+02,               /* 0x4061350C, 0x526AE721 */
    sa3 = 4.34565877475229228821e+02,               /* 0x407B290D, 0xD58A1A71 */
    sa4 = 6.45387271733267880336e+02,               /* 0x40842B19, 0x21EC2868 */
    sa5 = 4.29008140027567833386e+02,               /* 0x407AD021, 0x57700314 */
    sa6 = 1.08635005541779435134e+02,               /* 0x405B28A3, 0xEE48AE2C */
    sa7 = 6.57024977031928170135e+00,               /* 0x401A47EF, 0x8E484A93 */
    sa8 = -6.04244152148580987438e-02,              /* 0xBFAEEFF2, 0xEE749A62 */
                                                    /*
                                                     * Coefficients for approximation to  erfc in [1/.35,28]
                                                     */
    rb0 = -9.86494292470009928597e-03,              /* 0xBF843412, 0x39E86F4A */
    rb1 = -7.99283237680523006574e-01,              /* 0xBFE993BA, 0x70C285DE */
    rb2 = -1.77579549177547519889e+01,              /* 0xC031C209, 0x555F995A */
    rb3 = -1.60636384855821916062e+02,              /* 0xC064145D, 0x43C5ED98 */
    rb4 = -6.37566443368389627722e+02,              /* 0xC083EC88, 0x1375F228 */
    rb5 = -1.02509513161107724954e+03,              /* 0xC0900461, 0x6A2E5992 */
    rb6 = -4.83519191608651397019e+02,              /* 0xC07E384E, 0x9BDC383F */
    sb1 = 3.03380607434824582924e+01,               /* 0x403E568B, 0x261D5190 */
    sb2 = 3.25792512996573918826e+02,               /* 0x40745CAE, 0x221B9F0A */
    sb3 = 1.53672958608443695994e+03,               /* 0x409802EB, 0x189D5118 */
    sb4 = 3.19985821950859553908e+03,               /* 0x40A8FFB7, 0x688C246A */
    sb5 = 2.55305040643316442583e+03,               /* 0x40A3F219, 0xCEDF3BE6 */
    sb6 = 4.74528541206955367215e+02,               /* 0x407DA874, 0xE79FE763 */
    sb7 = -2.24409524465858183362e+01;              /* 0xC03670E2, 0x42712D62 */

static double erfc1(double x) {
  double_t s, P, Q;

  s = fabs(x) - 1;
  P = pa0 + s * (pa1 + s * (pa2 + s * (pa3 + s * (pa4 + s * (pa5 + s * pa6)))));
  Q = 1 + s * (qa1 + s * (qa2 + s * (qa3 + s * (qa4 + s * (qa5 + s * qa6)))));
  return 1 - erx - P / Q;
}

static double erfc2(uint32_t ix, double x) {
  double_t s, R, S;
  double z;

  if (ix < 0x3ff40000) /* |x| < 1.25 */
    return erfc1(x);

  x = fabs(x);
  s = 1 / (x * x);
  if (ix < 0x4006db6d) { /* |x| < 1/.35 ~ 2.85714 */
    R = ra0 +
        s * (ra1 +
             s * (ra2 +
                  s * (ra3 + s * (ra4 + s * (ra5 + s * (ra6 + s * ra7))))));
    S = 1.0 +
        s * (sa1 +
             s * (sa2 +
                  s * (sa3 +
                       s * (sa4 +
                            s * (sa5 + s * (sa6 + s * (sa7 + s * sa8)))))));
  } else { /* |x| > 1/.35 */
    R = rb0 +
        s * (rb1 + s * (rb2 + s * (rb3 + s * (rb4 + s * (rb5 + s * rb6)))));
    S = 1.0 +
        s * (sb1 +
             s * (sb2 +
                  s * (sb3 + s * (sb4 + s * (sb5 + s * (sb6 + s * sb7))))));
  }
  z = x;
  SET_LOW_WORD(z, 0);
  return exp(-z * z - 0.5625) * exp((z - x) * (z + x) + R / S) / x;
}

double erf(double x) {
  double r, s, z, y;
  uint32_t ix;
  int sign;

  GET_HIGH_WORD(ix, x);
  sign = ix >> 31;
  ix &= 0x7fffffff;
  if (ix >= 0x7ff00000) {
    /* erf(nan)=nan, erf(+-inf)=+-1 */
    return 1 - 2 * sign + 1 / x;
  }
  if (ix < 0x3feb0000) {   /* |x| < 0.84375 */
    if (ix < 0x3e300000) { /* |x| < 2**-28 */
      /* avoid underflow */
      return 0.125 * (8 * x + efx8 * x);
    }
    z = x * x;
    r = pp0 + z * (pp1 + z * (pp2 + z * (pp3 + z * pp4)));
    s = 1.0 + z * (qq1 + z * (qq2 + z * (qq3 + z * (qq4 + z * qq5))));
    y = r / s;
    return x + x * y;
  }
  if (ix < 0x40180000) /* 0.84375 <= |x| < 6 */
    y = 1 - erfc2(ix, x);
  else
    y = 1 - 0x1p-1022;
  return sign ? -y : y;
}

double erfc(double x) {
  double r, s, z, y;
  uint32_t ix;
  int sign;

  GET_HIGH_WORD(ix, x);
  sign = ix >> 31;
  ix &= 0x7fffffff;
  if (ix >= 0x7ff00000) {
    /* erfc(nan)=nan, erfc(+-inf)=0,2 */
    return 2 * sign + 1 / x;
  }
  if (ix < 0x3feb0000) { /* |x| < 0.84375 */
    if (ix < 0x3c700000) /* |x| < 2**-56 */
      return 1.0 - x;
    z = x * x;
    r = pp0 + z * (pp1 + z * (pp2 + z * (pp3 + z * pp4)));
    s = 1.0 + z * (qq1 + z * (qq2 + z * (qq3 + z * (qq4 + z * qq5))));
    y = r / s;
    if (sign || ix < 0x3fd00000) { /* x < 1/4 */
      return 1.0 - (x + x * y);
    }
    return 0.5 - (x - 0.5 + x * y);
  }
  if (ix < 0x403c0000) { /* 0.84375 <= |x| < 28 */
    return sign ? 2 - erfc2(ix, x) : erfc2(ix, x);
  }
  return sign ? 2 - 0x1p-1022 : 0x1p-1022 * 0x1p-1022;
}
