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 r70276 = a;
double r70277 = x;
double r70278 = r70276 * r70277;
double r70279 = exp(r70278);
double r70280 = 1.0;
double r70281 = r70279 - r70280;
return r70281;
}
double f(double a, double x) {
double r70282 = a;
double r70283 = x;
double r70284 = r70282 * r70283;
double r70285 = -173.65326083361478;
bool r70286 = r70284 <= r70285;
double r70287 = exp(r70284);
double r70288 = 1.0;
double r70289 = r70287 - r70288;
double r70290 = 3.0;
double r70291 = pow(r70289, r70290);
double r70292 = cbrt(r70291);
double r70293 = r70284 * r70282;
double r70294 = 0.16666666666666666;
double r70295 = r70284 * r70294;
double r70296 = 0.5;
double r70297 = r70295 + r70296;
double r70298 = r70293 * r70297;
double r70299 = r70283 * r70298;
double r70300 = r70284 + r70299;
double r70301 = r70286 ? r70292 : r70300;
return r70301;
}




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))