Average Error: 29.0 → 0.9
Time: 27.7s
Precision: 64
\[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
\[\frac{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \left(e^{x \cdot \left(\varepsilon - 1\right)} + \left(\frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)\right)}{2}\]
\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}
\frac{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \left(e^{x \cdot \left(\varepsilon - 1\right)} + \left(\frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)\right)}{2}
double f(double x, double eps) {
        double r3161915 = 1.0;
        double r3161916 = eps;
        double r3161917 = r3161915 / r3161916;
        double r3161918 = r3161915 + r3161917;
        double r3161919 = r3161915 - r3161916;
        double r3161920 = x;
        double r3161921 = r3161919 * r3161920;
        double r3161922 = -r3161921;
        double r3161923 = exp(r3161922);
        double r3161924 = r3161918 * r3161923;
        double r3161925 = r3161917 - r3161915;
        double r3161926 = r3161915 + r3161916;
        double r3161927 = r3161926 * r3161920;
        double r3161928 = -r3161927;
        double r3161929 = exp(r3161928);
        double r3161930 = r3161925 * r3161929;
        double r3161931 = r3161924 - r3161930;
        double r3161932 = 2.0;
        double r3161933 = r3161931 / r3161932;
        return r3161933;
}

double f(double x, double eps) {
        double r3161934 = x;
        double r3161935 = eps;
        double r3161936 = 1.0;
        double r3161937 = r3161935 + r3161936;
        double r3161938 = r3161934 * r3161937;
        double r3161939 = -r3161938;
        double r3161940 = exp(r3161939);
        double r3161941 = r3161935 - r3161936;
        double r3161942 = r3161934 * r3161941;
        double r3161943 = exp(r3161942);
        double r3161944 = r3161943 / r3161935;
        double r3161945 = r3161940 / r3161935;
        double r3161946 = r3161944 - r3161945;
        double r3161947 = r3161943 + r3161946;
        double r3161948 = r3161936 * r3161947;
        double r3161949 = fma(r3161940, r3161936, r3161948);
        double r3161950 = 2.0;
        double r3161951 = r3161949 / r3161950;
        return r3161951;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Initial program 29.0

    \[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
  2. Taylor expanded around inf 29.0

    \[\leadsto \frac{\color{blue}{\left(1 \cdot e^{x \cdot \varepsilon - 1 \cdot x} + \left(1 \cdot e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)} + 1 \cdot \frac{e^{x \cdot \varepsilon - 1 \cdot x}}{\varepsilon}\right)\right) - 1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon}}}{2}\]
  3. Simplified24.4

    \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \left(\left(e^{x \cdot \left(\varepsilon - 1\right)} + \frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon}\right) - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)}}{2}\]
  4. Using strategy rm
  5. Applied associate--l+0.9

    \[\leadsto \frac{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \color{blue}{\left(e^{x \cdot \left(\varepsilon - 1\right)} + \left(\frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)}\right)}{2}\]
  6. Final simplification0.9

    \[\leadsto \frac{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \left(e^{x \cdot \left(\varepsilon - 1\right)} + \left(\frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)\right)}{2}\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  (/ (- (* (+ 1.0 (/ 1.0 eps)) (exp (- (* (- 1.0 eps) x)))) (* (- (/ 1.0 eps) 1.0) (exp (- (* (+ 1.0 eps) x))))) 2.0))