\left(e^{x} - 2\right) + e^{-x}\begin{array}{l}
\mathbf{if}\;\left(e^{x} - 2\right) + e^{-x} \le 1.2761800916 \cdot 10^{-7}:\\
\;\;\;\;\mathsf{fma}\left(x, x, \mathsf{fma}\left(\frac{1}{360}, {x}^{6}, \frac{1}{12} \cdot {x}^{4}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(e^{x} - 2\right) + e^{-x}\\
\end{array}double f(double x) {
double r78449 = x;
double r78450 = exp(r78449);
double r78451 = 2.0;
double r78452 = r78450 - r78451;
double r78453 = -r78449;
double r78454 = exp(r78453);
double r78455 = r78452 + r78454;
return r78455;
}
double f(double x) {
double r78456 = x;
double r78457 = exp(r78456);
double r78458 = 2.0;
double r78459 = r78457 - r78458;
double r78460 = -r78456;
double r78461 = exp(r78460);
double r78462 = r78459 + r78461;
double r78463 = 1.2761800916027966e-07;
bool r78464 = r78462 <= r78463;
double r78465 = 0.002777777777777778;
double r78466 = 6.0;
double r78467 = pow(r78456, r78466);
double r78468 = 0.08333333333333333;
double r78469 = 4.0;
double r78470 = pow(r78456, r78469);
double r78471 = r78468 * r78470;
double r78472 = fma(r78465, r78467, r78471);
double r78473 = fma(r78456, r78456, r78472);
double r78474 = r78464 ? r78473 : r78462;
return r78474;
}




Bits error versus x
| Original | 29.8 |
|---|---|
| Target | 0.0 |
| Herbie | 0.1 |
if (+ (- (exp x) 2.0) (exp (- x))) < 1.2761800916027966e-07Initial program 30.3
Taylor expanded around 0 0.0
Simplified0
if 1.2761800916027966e-07 < (+ (- (exp x) 2.0) (exp (- x))) Initial program 5.1
Final simplification0.1
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x)
:name "exp2 (problem 3.3.7)"
:precision binary64
:herbie-target
(* 4 (pow (sinh (/ x 2)) 2))
(+ (- (exp x) 2) (exp (- x))))