Average Error: 0.2 → 0.2
Time: 35.2s
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({\left(\left|x\right|\right)}^{5}, \frac{1}{5}, \mathsf{fma}\left(\left|x\right|, 2, \mathsf{fma}\left({\left(\left|x\right|\right)}^{7}, \frac{1}{21}, \frac{2}{3} \cdot \left(\left|x\right| \cdot \left(\left|x\right| \cdot \left|x\right|\right)\right)\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({\left(\left|x\right|\right)}^{5}, \frac{1}{5}, \mathsf{fma}\left(\left|x\right|, 2, \mathsf{fma}\left({\left(\left|x\right|\right)}^{7}, \frac{1}{21}, \frac{2}{3} \cdot \left(\left|x\right| \cdot \left(\left|x\right| \cdot \left|x\right|\right)\right)\right)\right)\right)\right|
double f(double x) {
        double r4550830 = 1.0;
        double r4550831 = atan2(1.0, 0.0);
        double r4550832 = sqrt(r4550831);
        double r4550833 = r4550830 / r4550832;
        double r4550834 = 2.0;
        double r4550835 = x;
        double r4550836 = fabs(r4550835);
        double r4550837 = r4550834 * r4550836;
        double r4550838 = 3.0;
        double r4550839 = r4550834 / r4550838;
        double r4550840 = r4550836 * r4550836;
        double r4550841 = r4550840 * r4550836;
        double r4550842 = r4550839 * r4550841;
        double r4550843 = r4550837 + r4550842;
        double r4550844 = 5.0;
        double r4550845 = r4550830 / r4550844;
        double r4550846 = r4550841 * r4550836;
        double r4550847 = r4550846 * r4550836;
        double r4550848 = r4550845 * r4550847;
        double r4550849 = r4550843 + r4550848;
        double r4550850 = 21.0;
        double r4550851 = r4550830 / r4550850;
        double r4550852 = r4550847 * r4550836;
        double r4550853 = r4550852 * r4550836;
        double r4550854 = r4550851 * r4550853;
        double r4550855 = r4550849 + r4550854;
        double r4550856 = r4550833 * r4550855;
        double r4550857 = fabs(r4550856);
        return r4550857;
}

double f(double x) {
        double r4550858 = 1.0;
        double r4550859 = atan2(1.0, 0.0);
        double r4550860 = r4550858 / r4550859;
        double r4550861 = sqrt(r4550860);
        double r4550862 = x;
        double r4550863 = fabs(r4550862);
        double r4550864 = 5.0;
        double r4550865 = pow(r4550863, r4550864);
        double r4550866 = 0.2;
        double r4550867 = 2.0;
        double r4550868 = 7.0;
        double r4550869 = pow(r4550863, r4550868);
        double r4550870 = 0.047619047619047616;
        double r4550871 = 0.6666666666666666;
        double r4550872 = r4550863 * r4550863;
        double r4550873 = r4550863 * r4550872;
        double r4550874 = r4550871 * r4550873;
        double r4550875 = fma(r4550869, r4550870, r4550874);
        double r4550876 = fma(r4550863, r4550867, r4550875);
        double r4550877 = fma(r4550865, r4550866, r4550876);
        double r4550878 = r4550861 * r4550877;
        double r4550879 = fabs(r4550878);
        return r4550879;
}

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({\left(\left|x\right|\right)}^{5}, \frac{1}{5}, \mathsf{fma}\left(\left|x\right|, 2, \mathsf{fma}\left({\left(\left|x\right|\right)}^{7}, \frac{1}{21}, \left(\left(\left|x\right| \cdot \left|x\right|\right) \cdot \left|x\right|\right) \cdot \frac{2}{3}\right)\right)\right)}\right|\]
  4. Final simplification0.2

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

Reproduce

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