Average Error: 0.2 → 0.2
Time: 2.6m
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|\sqrt{\frac{1}{\pi}} \cdot \mathsf{fma}\left(\frac{1}{5}, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, \mathsf{fma}\left(\frac{2}{3}, \left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|, \frac{1}{21} \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|\sqrt{\frac{1}{\pi}} \cdot \mathsf{fma}\left(\frac{1}{5}, {\left(\left|x\right|\right)}^{5}, \mathsf{fma}\left(2, \left|x\right|, \mathsf{fma}\left(\frac{2}{3}, \left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|, \frac{1}{21} \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right)\right|
double f(double x) {
        double r7276765 = 1.0;
        double r7276766 = atan2(1.0, 0.0);
        double r7276767 = sqrt(r7276766);
        double r7276768 = r7276765 / r7276767;
        double r7276769 = 2.0;
        double r7276770 = x;
        double r7276771 = fabs(r7276770);
        double r7276772 = r7276769 * r7276771;
        double r7276773 = 3.0;
        double r7276774 = r7276769 / r7276773;
        double r7276775 = r7276771 * r7276771;
        double r7276776 = r7276775 * r7276771;
        double r7276777 = r7276774 * r7276776;
        double r7276778 = r7276772 + r7276777;
        double r7276779 = 5.0;
        double r7276780 = r7276765 / r7276779;
        double r7276781 = r7276776 * r7276771;
        double r7276782 = r7276781 * r7276771;
        double r7276783 = r7276780 * r7276782;
        double r7276784 = r7276778 + r7276783;
        double r7276785 = 21.0;
        double r7276786 = r7276765 / r7276785;
        double r7276787 = r7276782 * r7276771;
        double r7276788 = r7276787 * r7276771;
        double r7276789 = r7276786 * r7276788;
        double r7276790 = r7276784 + r7276789;
        double r7276791 = r7276768 * r7276790;
        double r7276792 = fabs(r7276791);
        return r7276792;
}

double f(double x) {
        double r7276793 = 1.0;
        double r7276794 = atan2(1.0, 0.0);
        double r7276795 = r7276793 / r7276794;
        double r7276796 = sqrt(r7276795);
        double r7276797 = 0.2;
        double r7276798 = x;
        double r7276799 = fabs(r7276798);
        double r7276800 = 5.0;
        double r7276801 = pow(r7276799, r7276800);
        double r7276802 = 2.0;
        double r7276803 = 0.6666666666666666;
        double r7276804 = r7276799 * r7276799;
        double r7276805 = r7276804 * r7276799;
        double r7276806 = 0.047619047619047616;
        double r7276807 = 7.0;
        double r7276808 = pow(r7276799, r7276807);
        double r7276809 = r7276806 * r7276808;
        double r7276810 = fma(r7276803, r7276805, r7276809);
        double r7276811 = fma(r7276802, r7276799, r7276810);
        double r7276812 = fma(r7276797, r7276801, r7276811);
        double r7276813 = r7276796 * r7276812;
        double r7276814 = fabs(r7276813);
        return r7276814;
}

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}{\sqrt{\frac{1}{\pi}} \cdot \left(\frac{1}{5} \cdot {\left(\left|x\right|\right)}^{5} + \left(2 \cdot \left|x\right| + \left(\frac{2}{3} \cdot {\left(\left|x\right|\right)}^{3} + \frac{1}{21} \cdot {\left(\left|x\right|\right)}^{7}\right)\right)\right)}\right|\]
  3. Simplified0.2

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

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

Reproduce

herbie shell --seed 2019158 +o rules:numerics
(FPCore (x)
  :name "Jmat.Real.erfi, branch x less than or equal to 0.5"
  (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)))))))