\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;
}



Bits error versus x



Bits error versus eps
if x < 3.375282683015706e-23Initial program 38.2
Taylor expanded around 0 1.2
Simplified1.2
if 3.375282683015706e-23 < x Initial program 4.1
Taylor expanded around inf 4.1
Simplified4.1
Final simplification2.0
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))