\left(e^{x} - 2\right) + e^{-x}\begin{array}{l}
\mathbf{if}\;x \le -0.026496043719365127:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(e^{x}\right), \left(\mathsf{fma}\left(\left(e^{x}\right), \left(e^{x}\right), -4\right)\right), \left(e^{x} + 2\right)\right)}{e^{x} \cdot \left(e^{x} + 2\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\log \left(e^{\frac{1}{360} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)}\right)\right), \left(x \cdot x\right), \left(\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right), \frac{1}{12}, \left(x \cdot x\right)\right)\right)\right)\\
\end{array}double f(double x) {
double r6057028 = x;
double r6057029 = exp(r6057028);
double r6057030 = 2.0;
double r6057031 = r6057029 - r6057030;
double r6057032 = -r6057028;
double r6057033 = exp(r6057032);
double r6057034 = r6057031 + r6057033;
return r6057034;
}
double f(double x) {
double r6057035 = x;
double r6057036 = -0.026496043719365127;
bool r6057037 = r6057035 <= r6057036;
double r6057038 = exp(r6057035);
double r6057039 = -4.0;
double r6057040 = fma(r6057038, r6057038, r6057039);
double r6057041 = 2.0;
double r6057042 = r6057038 + r6057041;
double r6057043 = fma(r6057038, r6057040, r6057042);
double r6057044 = r6057038 * r6057042;
double r6057045 = r6057043 / r6057044;
double r6057046 = 0.002777777777777778;
double r6057047 = r6057035 * r6057035;
double r6057048 = r6057047 * r6057047;
double r6057049 = r6057046 * r6057048;
double r6057050 = exp(r6057049);
double r6057051 = log(r6057050);
double r6057052 = 0.08333333333333333;
double r6057053 = fma(r6057048, r6057052, r6057047);
double r6057054 = fma(r6057051, r6057047, r6057053);
double r6057055 = r6057037 ? r6057045 : r6057054;
return r6057055;
}




Bits error versus x
| Original | 29.5 |
|---|---|
| Target | 0.0 |
| Herbie | 0.3 |
if x < -0.026496043719365127Initial program 1.5
Simplified1.6
rmApplied flip--1.6
Applied frac-sub1.4
Simplified1.3
if -0.026496043719365127 < x Initial program 29.8
Simplified29.8
Taylor expanded around 0 0.2
Simplified0.2
rmApplied add-log-exp0.2
Final simplification0.3
herbie shell --seed 2019120 +o rules:numerics
(FPCore (x)
:name "exp2 (problem 3.3.7)"
:herbie-target
(* 4 (pow (sinh (/ x 2)) 2))
(+ (- (exp x) 2) (exp (- x))))