Average Error: 29.0 → 1.2
Time: 20.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 42.86355037677379442584424396045506000519:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2 - 1 \cdot {x}^{2}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot {\left(e^{-1}\right)}^{\left(\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 42.86355037677379442584424396045506000519:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2 - 1 \cdot {x}^{2}\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r37187 = 1.0;
        double r37188 = eps;
        double r37189 = r37187 / r37188;
        double r37190 = r37187 + r37189;
        double r37191 = r37187 - r37188;
        double r37192 = x;
        double r37193 = r37191 * r37192;
        double r37194 = -r37193;
        double r37195 = exp(r37194);
        double r37196 = r37190 * r37195;
        double r37197 = r37189 - r37187;
        double r37198 = r37187 + r37188;
        double r37199 = r37198 * r37192;
        double r37200 = -r37199;
        double r37201 = exp(r37200);
        double r37202 = r37197 * r37201;
        double r37203 = r37196 - r37202;
        double r37204 = 2.0;
        double r37205 = r37203 / r37204;
        return r37205;
}

double f(double x, double eps) {
        double r37206 = x;
        double r37207 = 42.863550376773794;
        bool r37208 = r37206 <= r37207;
        double r37209 = 3.0;
        double r37210 = pow(r37206, r37209);
        double r37211 = 0.6666666666666667;
        double r37212 = 2.0;
        double r37213 = 1.0;
        double r37214 = 2.0;
        double r37215 = pow(r37206, r37214);
        double r37216 = r37213 * r37215;
        double r37217 = r37212 - r37216;
        double r37218 = fma(r37210, r37211, r37217);
        double r37219 = r37218 / r37212;
        double r37220 = eps;
        double r37221 = r37213 / r37220;
        double r37222 = r37213 + r37221;
        double r37223 = r37213 - r37220;
        double r37224 = r37223 * r37206;
        double r37225 = -r37224;
        double r37226 = exp(r37225);
        double r37227 = r37222 * r37226;
        double r37228 = r37221 - r37213;
        double r37229 = -1.0;
        double r37230 = exp(r37229);
        double r37231 = r37213 + r37220;
        double r37232 = r37231 * r37206;
        double r37233 = pow(r37230, r37232);
        double r37234 = r37228 * r37233;
        double r37235 = r37227 - r37234;
        double r37236 = r37235 / r37212;
        double r37237 = r37208 ? r37219 : r37236;
        return r37237;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 42.863550376773794

    1. Initial program 38.7

      \[\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.4

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity1.4

      \[\leadsto \frac{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}{\color{blue}{1 \cdot 2}}\]
    6. Applied *-un-lft-identity1.4

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

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

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

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

    if 42.863550376773794 < x

    1. Initial program 0.3

      \[\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. Using strategy rm
    3. Applied neg-mul-10.3

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

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

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

Reproduce

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