Average Error: 0.2 → 0.2
Time: 11.5s
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|\frac{1}{\sqrt{\pi}} \cdot \mathsf{fma}\left({\left(\left|x\right|\right)}^{7}, \frac{1}{21}, \mathsf{fma}\left(\left|x\right|, \mathsf{fma}\left({\left(\left|x\right|\right)}^{4}, \frac{1}{5}, 2\right), {\left(\left|x\right|\right)}^{3} \cdot \frac{2}{3}\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|\frac{1}{\sqrt{\pi}} \cdot \mathsf{fma}\left({\left(\left|x\right|\right)}^{7}, \frac{1}{21}, \mathsf{fma}\left(\left|x\right|, \mathsf{fma}\left({\left(\left|x\right|\right)}^{4}, \frac{1}{5}, 2\right), {\left(\left|x\right|\right)}^{3} \cdot \frac{2}{3}\right)\right)\right|
double f(double x) {
        double r154715 = 1.0;
        double r154716 = atan2(1.0, 0.0);
        double r154717 = sqrt(r154716);
        double r154718 = r154715 / r154717;
        double r154719 = 2.0;
        double r154720 = x;
        double r154721 = fabs(r154720);
        double r154722 = r154719 * r154721;
        double r154723 = 3.0;
        double r154724 = r154719 / r154723;
        double r154725 = r154721 * r154721;
        double r154726 = r154725 * r154721;
        double r154727 = r154724 * r154726;
        double r154728 = r154722 + r154727;
        double r154729 = 5.0;
        double r154730 = r154715 / r154729;
        double r154731 = r154726 * r154721;
        double r154732 = r154731 * r154721;
        double r154733 = r154730 * r154732;
        double r154734 = r154728 + r154733;
        double r154735 = 21.0;
        double r154736 = r154715 / r154735;
        double r154737 = r154732 * r154721;
        double r154738 = r154737 * r154721;
        double r154739 = r154736 * r154738;
        double r154740 = r154734 + r154739;
        double r154741 = r154718 * r154740;
        double r154742 = fabs(r154741);
        return r154742;
}

double f(double x) {
        double r154743 = 1.0;
        double r154744 = atan2(1.0, 0.0);
        double r154745 = sqrt(r154744);
        double r154746 = r154743 / r154745;
        double r154747 = x;
        double r154748 = fabs(r154747);
        double r154749 = 7.0;
        double r154750 = pow(r154748, r154749);
        double r154751 = 21.0;
        double r154752 = r154743 / r154751;
        double r154753 = 4.0;
        double r154754 = pow(r154748, r154753);
        double r154755 = 5.0;
        double r154756 = r154743 / r154755;
        double r154757 = 2.0;
        double r154758 = fma(r154754, r154756, r154757);
        double r154759 = 3.0;
        double r154760 = pow(r154748, r154759);
        double r154761 = 3.0;
        double r154762 = r154757 / r154761;
        double r154763 = r154760 * r154762;
        double r154764 = fma(r154748, r154758, r154763);
        double r154765 = fma(r154750, r154752, r154764);
        double r154766 = r154746 * r154765;
        double r154767 = fabs(r154766);
        return r154767;
}

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. Simplified0.2

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

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

Reproduce

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