\left(e^{x} - 2\right) + e^{-x}\begin{array}{l}
\mathbf{if}\;x \le 0.03079641647625869921300889586746052373201:\\
\;\;\;\;{x}^{2} + \left(\frac{1}{360} \cdot {x}^{6} + \frac{1}{12} \cdot {x}^{4}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\left({\left(e^{x}\right)}^{3} - {2}^{3}\right) \cdot \left(e^{x} - 2\right)\right) \cdot \left(e^{x} \cdot e^{x}\right) - \left(e^{x} \cdot e^{x} + \left(2 \cdot 2 + e^{x} \cdot 2\right)\right) \cdot \left(1 \cdot e^{0}\right)}{\left(\left(e^{x} - \left(e^{-x} + 2\right)\right) \cdot \left(2 \cdot \left(2 + e^{x}\right) + {\left(e^{x}\right)}^{2}\right)\right) \cdot {\left(e^{x}\right)}^{2}}\\
\end{array}double f(double x) {
double r78657 = x;
double r78658 = exp(r78657);
double r78659 = 2.0;
double r78660 = r78658 - r78659;
double r78661 = -r78657;
double r78662 = exp(r78661);
double r78663 = r78660 + r78662;
return r78663;
}
double f(double x) {
double r78664 = x;
double r78665 = 0.0307964164762587;
bool r78666 = r78664 <= r78665;
double r78667 = 2.0;
double r78668 = pow(r78664, r78667);
double r78669 = 0.002777777777777778;
double r78670 = 6.0;
double r78671 = pow(r78664, r78670);
double r78672 = r78669 * r78671;
double r78673 = 0.08333333333333333;
double r78674 = 4.0;
double r78675 = pow(r78664, r78674);
double r78676 = r78673 * r78675;
double r78677 = r78672 + r78676;
double r78678 = r78668 + r78677;
double r78679 = exp(r78664);
double r78680 = 3.0;
double r78681 = pow(r78679, r78680);
double r78682 = 2.0;
double r78683 = pow(r78682, r78680);
double r78684 = r78681 - r78683;
double r78685 = r78679 - r78682;
double r78686 = r78684 * r78685;
double r78687 = r78679 * r78679;
double r78688 = r78686 * r78687;
double r78689 = r78682 * r78682;
double r78690 = r78679 * r78682;
double r78691 = r78689 + r78690;
double r78692 = r78687 + r78691;
double r78693 = 1.0;
double r78694 = 0.0;
double r78695 = exp(r78694);
double r78696 = r78693 * r78695;
double r78697 = r78692 * r78696;
double r78698 = r78688 - r78697;
double r78699 = -r78664;
double r78700 = exp(r78699);
double r78701 = r78700 + r78682;
double r78702 = r78679 - r78701;
double r78703 = r78682 + r78679;
double r78704 = r78682 * r78703;
double r78705 = pow(r78679, r78667);
double r78706 = r78704 + r78705;
double r78707 = r78702 * r78706;
double r78708 = r78707 * r78705;
double r78709 = r78698 / r78708;
double r78710 = r78666 ? r78678 : r78709;
return r78710;
}




Bits error versus x
Results
| Original | 29.8 |
|---|---|
| Target | 0.0 |
| Herbie | 0.4 |
if x < 0.0307964164762587Initial program 30.0
Taylor expanded around 0 0.4
if 0.0307964164762587 < x Initial program 1.2
rmApplied flip-+3.4
rmApplied neg-sub03.4
Applied exp-diff3.2
Applied exp-neg3.4
Applied frac-times3.5
Applied flip3--4.7
Applied associate-*l/8.3
Applied frac-sub9.5
Applied associate-/l/9.5
Simplified9.5
Final simplification0.4
herbie shell --seed 2019291
(FPCore (x)
:name "exp2 (problem 3.3.7)"
:precision binary64
:herbie-target
(* 4 (pow (sinh (/ x 2)) 2))
(+ (- (exp x) 2) (exp (- x))))