Average Error: 0.2 → 0.2
Time: 6.4s
Precision: 64
\[\left|\frac{1}{\sqrt{\pi}} \cdot \left(\left(\left(2 \cdot \left|x\right| + \frac{2}{3} \cdot \left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{5} \cdot \left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{21} \cdot \left(\left(\left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right)\right|\]
\[\left|\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3}\right) + \left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right|\]
\left|\frac{1}{\sqrt{\pi}} \cdot \left(\left(\left(2 \cdot \left|x\right| + \frac{2}{3} \cdot \left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{5} \cdot \left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{21} \cdot \left(\left(\left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right)\right|
\left|\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3}\right) + \left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right|
double f(double x) {
        double r214596 = 1.0;
        double r214597 = atan2(1.0, 0.0);
        double r214598 = sqrt(r214597);
        double r214599 = r214596 / r214598;
        double r214600 = 2.0;
        double r214601 = x;
        double r214602 = fabs(r214601);
        double r214603 = r214600 * r214602;
        double r214604 = 3.0;
        double r214605 = r214600 / r214604;
        double r214606 = r214602 * r214602;
        double r214607 = r214606 * r214602;
        double r214608 = r214605 * r214607;
        double r214609 = r214603 + r214608;
        double r214610 = 5.0;
        double r214611 = r214596 / r214610;
        double r214612 = r214607 * r214602;
        double r214613 = r214612 * r214602;
        double r214614 = r214611 * r214613;
        double r214615 = r214609 + r214614;
        double r214616 = 21.0;
        double r214617 = r214596 / r214616;
        double r214618 = r214613 * r214602;
        double r214619 = r214618 * r214602;
        double r214620 = r214617 * r214619;
        double r214621 = r214615 + r214620;
        double r214622 = r214599 * r214621;
        double r214623 = fabs(r214622);
        return r214623;
}

double f(double x) {
        double r214624 = 1.0;
        double r214625 = 1.0;
        double r214626 = atan2(1.0, 0.0);
        double r214627 = r214625 / r214626;
        double r214628 = sqrt(r214627);
        double r214629 = r214624 * r214628;
        double r214630 = 0.6666666666666666;
        double r214631 = x;
        double r214632 = fabs(r214631);
        double r214633 = 3.0;
        double r214634 = pow(r214632, r214633);
        double r214635 = r214630 * r214634;
        double r214636 = r214629 * r214635;
        double r214637 = 0.2;
        double r214638 = 5.0;
        double r214639 = pow(r214632, r214638);
        double r214640 = 2.0;
        double r214641 = 0.047619047619047616;
        double r214642 = 7.0;
        double r214643 = pow(r214632, r214642);
        double r214644 = r214641 * r214643;
        double r214645 = fma(r214640, r214632, r214644);
        double r214646 = fma(r214637, r214639, r214645);
        double r214647 = r214629 * r214646;
        double r214648 = r214636 + r214647;
        double r214649 = fabs(r214648);
        return r214649;
}

Error

Bits error versus x

Derivation

  1. Initial program 0.2

    \[\left|\frac{1}{\sqrt{\pi}} \cdot \left(\left(\left(2 \cdot \left|x\right| + \frac{2}{3} \cdot \left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{5} \cdot \left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right) + \frac{1}{21} \cdot \left(\left(\left(\left(\left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \left|x\right|\right)\right)\right|\]
  2. Taylor expanded around 0 0.2

    \[\leadsto \left|\color{blue}{1 \cdot \left(\sqrt{\frac{1}{\pi}} \cdot \left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3} + \left(0.20000000000000001 \cdot {\left(\left|x\right|\right)}^{5} + \left(2 \cdot \left|x\right| + 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right)\right)}\right|\]
  3. Simplified0.2

    \[\leadsto \left|\color{blue}{\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \mathsf{fma}\left(0.66666666666666663, {\left(\left|x\right|\right)}^{3}, \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right)}\right|\]
  4. Using strategy rm
  5. Applied fma-udef0.2

    \[\leadsto \left|\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \color{blue}{\left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3} + \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right)}\right|\]
  6. Applied distribute-lft-in0.2

    \[\leadsto \left|\color{blue}{\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3}\right) + \left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)}\right|\]
  7. Final simplification0.2

    \[\leadsto \left|\left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \left(0.66666666666666663 \cdot {\left(\left|x\right|\right)}^{3}\right) + \left(1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \mathsf{fma}\left(0.20000000000000001, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, 0.047619047619047616 \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right|\]

Reproduce

herbie shell --seed 2020059 +o rules:numerics
(FPCore (x)
  :name "Jmat.Real.erfi, branch x less than or equal to 0.5"
  :precision binary64
  (fabs (* (/ 1 (sqrt PI)) (+ (+ (+ (* 2 (fabs x)) (* (/ 2 3) (* (* (fabs x) (fabs x)) (fabs x)))) (* (/ 1 5) (* (* (* (* (fabs x) (fabs x)) (fabs x)) (fabs x)) (fabs x)))) (* (/ 1 21) (* (* (* (* (* (* (fabs x) (fabs x)) (fabs x)) (fabs x)) (fabs x)) (fabs x)) (fabs x)))))))