Average Error: 28.9 → 2.0
Time: 32.3s
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}\]
\[\begin{array}{l} \mathbf{if}\;x \le 3.375282683015706291841696417845614769891 \cdot 10^{-23}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\ \end{array}\]
\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}
\begin{array}{l}
\mathbf{if}\;x \le 3.375282683015706291841696417845614769891 \cdot 10^{-23}:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\

\end{array}
double f(double x, double eps) {
        double r58184 = 1.0;
        double r58185 = eps;
        double r58186 = r58184 / r58185;
        double r58187 = r58184 + r58186;
        double r58188 = r58184 - r58185;
        double r58189 = x;
        double r58190 = r58188 * r58189;
        double r58191 = -r58190;
        double r58192 = exp(r58191);
        double r58193 = r58187 * r58192;
        double r58194 = r58186 - r58184;
        double r58195 = r58184 + r58185;
        double r58196 = r58195 * r58189;
        double r58197 = -r58196;
        double r58198 = exp(r58197);
        double r58199 = r58194 * r58198;
        double r58200 = r58193 - r58199;
        double r58201 = 2.0;
        double r58202 = r58200 / r58201;
        return r58202;
}

double f(double x, double eps) {
        double r58203 = x;
        double r58204 = 3.375282683015706e-23;
        bool r58205 = r58203 <= r58204;
        double r58206 = 0.6666666666666667;
        double r58207 = 3.0;
        double r58208 = pow(r58203, r58207);
        double r58209 = 2.0;
        double r58210 = fma(r58206, r58208, r58209);
        double r58211 = 1.0;
        double r58212 = 2.0;
        double r58213 = pow(r58203, r58212);
        double r58214 = r58211 * r58213;
        double r58215 = r58210 - r58214;
        double r58216 = r58215 / r58209;
        double r58217 = eps;
        double r58218 = r58211 / r58217;
        double r58219 = r58211 + r58218;
        double r58220 = r58211 - r58217;
        double r58221 = r58220 * r58203;
        double r58222 = -r58221;
        double r58223 = exp(r58222);
        double r58224 = r58219 * r58223;
        double r58225 = r58211 + r58217;
        double r58226 = r58225 * r58203;
        double r58227 = exp(r58226);
        double r58228 = r58211 / r58227;
        double r58229 = r58228 / r58217;
        double r58230 = r58229 - r58228;
        double r58231 = r58224 - r58230;
        double r58232 = r58231 / r58209;
        double r58233 = r58205 ? r58216 : r58232;
        return r58233;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 3.375282683015706e-23

    1. Initial program 38.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}\]
    2. Taylor expanded around 0 1.2

      \[\leadsto \frac{\color{blue}{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.2

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]

    if 3.375282683015706e-23 < x

    1. Initial program 4.1

      \[\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 4.1

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

      \[\leadsto \frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \color{blue}{\left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification2.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 3.375282683015706291841696417845614769891 \cdot 10^{-23}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{\frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{\varepsilon} - \frac{1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  :precision binary64
  (/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))