Average Error: 29.1 → 1.1
Time: 6.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 273.9633798024049156083492562174797058105:\\ \;\;\;\;\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} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - \frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}}\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 273.9633798024049156083492562174797058105:\\
\;\;\;\;\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} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - \frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}}\right)}{2}\\

\end{array}
double f(double x, double eps) {
        double r45149 = 1.0;
        double r45150 = eps;
        double r45151 = r45149 / r45150;
        double r45152 = r45149 + r45151;
        double r45153 = r45149 - r45150;
        double r45154 = x;
        double r45155 = r45153 * r45154;
        double r45156 = -r45155;
        double r45157 = exp(r45156);
        double r45158 = r45152 * r45157;
        double r45159 = r45151 - r45149;
        double r45160 = r45149 + r45150;
        double r45161 = r45160 * r45154;
        double r45162 = -r45161;
        double r45163 = exp(r45162);
        double r45164 = r45159 * r45163;
        double r45165 = r45158 - r45164;
        double r45166 = 2.0;
        double r45167 = r45165 / r45166;
        return r45167;
}

double f(double x, double eps) {
        double r45168 = x;
        double r45169 = 273.9633798024049;
        bool r45170 = r45168 <= r45169;
        double r45171 = 3.0;
        double r45172 = pow(r45168, r45171);
        double r45173 = 0.6666666666666667;
        double r45174 = 2.0;
        double r45175 = 1.0;
        double r45176 = 2.0;
        double r45177 = pow(r45168, r45176);
        double r45178 = r45175 * r45177;
        double r45179 = r45174 - r45178;
        double r45180 = fma(r45172, r45173, r45179);
        double r45181 = r45180 / r45174;
        double r45182 = eps;
        double r45183 = r45175 / r45182;
        double r45184 = r45175 + r45183;
        double r45185 = r45175 - r45182;
        double r45186 = r45185 * r45168;
        double r45187 = -r45186;
        double r45188 = exp(r45187);
        double r45189 = r45184 * r45188;
        double r45190 = r45168 * r45182;
        double r45191 = r45175 * r45168;
        double r45192 = r45190 + r45191;
        double r45193 = -r45192;
        double r45194 = exp(r45193);
        double r45195 = r45194 / r45182;
        double r45196 = 1.0;
        double r45197 = fma(r45168, r45182, r45191);
        double r45198 = exp(r45197);
        double r45199 = r45196 / r45198;
        double r45200 = r45195 - r45199;
        double r45201 = r45175 * r45200;
        double r45202 = r45189 - r45201;
        double r45203 = r45202 / r45174;
        double r45204 = r45170 ? r45181 : r45203;
        return r45204;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.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 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({x}^{3}, 0.6666666666666667406815349750104360282421, 2 - 1 \cdot {x}^{2}\right)}}{2}\]

    if 273.9633798024049 < x

    1. Initial program 0.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 0.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. Simplified0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 273.9633798024049156083492562174797058105:\\ \;\;\;\;\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} - 1 \cdot \left(\frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon} - \frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}}\right)}{2}\\ \end{array}\]

Reproduce

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