e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -173.653260833614780267453170381486415863:\\
\;\;\;\;\sqrt[3]{{\left(e^{a \cdot x} - 1\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + x \cdot \left(\left(\left(a \cdot x\right) \cdot a\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{6} + \frac{1}{2}\right)\right)\\
\end{array}double f(double a, double x) {
double r56108 = a;
double r56109 = x;
double r56110 = r56108 * r56109;
double r56111 = exp(r56110);
double r56112 = 1.0;
double r56113 = r56111 - r56112;
return r56113;
}
double f(double a, double x) {
double r56114 = a;
double r56115 = x;
double r56116 = r56114 * r56115;
double r56117 = -173.65326083361478;
bool r56118 = r56116 <= r56117;
double r56119 = exp(r56116);
double r56120 = 1.0;
double r56121 = r56119 - r56120;
double r56122 = 3.0;
double r56123 = pow(r56121, r56122);
double r56124 = cbrt(r56123);
double r56125 = r56116 * r56114;
double r56126 = 0.16666666666666666;
double r56127 = r56116 * r56126;
double r56128 = 0.5;
double r56129 = r56127 + r56128;
double r56130 = r56125 * r56129;
double r56131 = r56115 * r56130;
double r56132 = r56116 + r56131;
double r56133 = r56118 ? r56124 : r56132;
return r56133;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if (* a x) < -173.65326083361478Initial program 0
rmApplied add-cbrt-cube0
Simplified0
if -173.65326083361478 < (* a x) Initial program 44.1
Taylor expanded around 0 14.4
Simplified4.9
rmApplied associate-*r*4.9
Simplified0.7
rmApplied distribute-lft-in0.7
Simplified0.7
Final simplification0.5
herbie shell --seed 2019325
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))