Average Error: 0.2 → 0.2
Time: 6.6s
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 \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|\]
\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 \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|
double f(double x) {
        double r168664 = 1.0;
        double r168665 = atan2(1.0, 0.0);
        double r168666 = sqrt(r168665);
        double r168667 = r168664 / r168666;
        double r168668 = 2.0;
        double r168669 = x;
        double r168670 = fabs(r168669);
        double r168671 = r168668 * r168670;
        double r168672 = 3.0;
        double r168673 = r168668 / r168672;
        double r168674 = r168670 * r168670;
        double r168675 = r168674 * r168670;
        double r168676 = r168673 * r168675;
        double r168677 = r168671 + r168676;
        double r168678 = 5.0;
        double r168679 = r168664 / r168678;
        double r168680 = r168675 * r168670;
        double r168681 = r168680 * r168670;
        double r168682 = r168679 * r168681;
        double r168683 = r168677 + r168682;
        double r168684 = 21.0;
        double r168685 = r168664 / r168684;
        double r168686 = r168681 * r168670;
        double r168687 = r168686 * r168670;
        double r168688 = r168685 * r168687;
        double r168689 = r168683 + r168688;
        double r168690 = r168667 * r168689;
        double r168691 = fabs(r168690);
        return r168691;
}

double f(double x) {
        double r168692 = 1.0;
        double r168693 = 1.0;
        double r168694 = atan2(1.0, 0.0);
        double r168695 = r168693 / r168694;
        double r168696 = sqrt(r168695);
        double r168697 = r168692 * r168696;
        double r168698 = 0.6666666666666666;
        double r168699 = x;
        double r168700 = fabs(r168699);
        double r168701 = 3.0;
        double r168702 = pow(r168700, r168701);
        double r168703 = 0.2;
        double r168704 = 5.0;
        double r168705 = pow(r168700, r168704);
        double r168706 = 2.0;
        double r168707 = 0.047619047619047616;
        double r168708 = 7.0;
        double r168709 = pow(r168700, r168708);
        double r168710 = r168707 * r168709;
        double r168711 = fma(r168706, r168700, r168710);
        double r168712 = fma(r168703, r168705, r168711);
        double r168713 = fma(r168698, r168702, r168712);
        double r168714 = r168697 * r168713;
        double r168715 = fabs(r168714);
        return r168715;
}

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. Final simplification0.2

    \[\leadsto \left|\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|\]

Reproduce

herbie shell --seed 2020065 +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)))))))