e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \le -2.220968693212043584151047536654679869547 \cdot 10^{98}:\\
\;\;\;\;e^{x \cdot a} - 1\\
\mathbf{elif}\;a \le -3.362393975033817970229302492536134970466 \cdot 10^{63}:\\
\;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\
\mathbf{elif}\;a \le -1655268361375023616:\\
\;\;\;\;e^{x \cdot a} - 1\\
\mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\
\;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\
\mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\
\;\;\;\;e^{x \cdot a} - 1\\
\mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\
\;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\
\mathbf{else}:\\
\;\;\;\;e^{x \cdot a} - 1\\
\end{array}double f(double a, double x) {
double r4983434 = a;
double r4983435 = x;
double r4983436 = r4983434 * r4983435;
double r4983437 = exp(r4983436);
double r4983438 = 1.0;
double r4983439 = r4983437 - r4983438;
return r4983439;
}
double f(double a, double x) {
double r4983440 = a;
double r4983441 = -2.2209686932120436e+98;
bool r4983442 = r4983440 <= r4983441;
double r4983443 = x;
double r4983444 = r4983443 * r4983440;
double r4983445 = exp(r4983444);
double r4983446 = 1.0;
double r4983447 = r4983445 - r4983446;
double r4983448 = -3.362393975033818e+63;
bool r4983449 = r4983440 <= r4983448;
double r4983450 = 0.5;
double r4983451 = r4983450 * r4983444;
double r4983452 = r4983444 * r4983451;
double r4983453 = r4983444 + r4983452;
double r4983454 = r4983444 * r4983444;
double r4983455 = r4983444 * r4983454;
double r4983456 = 0.16666666666666666;
double r4983457 = r4983455 * r4983456;
double r4983458 = r4983453 + r4983457;
double r4983459 = -1.6552683613750236e+18;
bool r4983460 = r4983440 <= r4983459;
double r4983461 = -1.3705872472640043e-65;
bool r4983462 = r4983440 <= r4983461;
double r4983463 = -4.926528827195549e-81;
bool r4983464 = r4983440 <= r4983463;
double r4983465 = 5.1422287804261643e+104;
bool r4983466 = r4983440 <= r4983465;
double r4983467 = r4983466 ? r4983458 : r4983447;
double r4983468 = r4983464 ? r4983447 : r4983467;
double r4983469 = r4983462 ? r4983458 : r4983468;
double r4983470 = r4983460 ? r4983447 : r4983469;
double r4983471 = r4983449 ? r4983458 : r4983470;
double r4983472 = r4983442 ? r4983447 : r4983471;
return r4983472;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 13.8 |
if a < -2.2209686932120436e+98 or -3.362393975033818e+63 < a < -1.6552683613750236e+18 or -1.3705872472640043e-65 < a < -4.926528827195549e-81 or 5.1422287804261643e+104 < a Initial program 19.0
rmApplied add-exp-log19.0
Simplified19.0
if -2.2209686932120436e+98 < a < -3.362393975033818e+63 or -1.6552683613750236e+18 < a < -1.3705872472640043e-65 or -4.926528827195549e-81 < a < 5.1422287804261643e+104Initial program 34.6
Taylor expanded around 0 18.5
Simplified11.5
Final simplification13.8
herbie shell --seed 2019171
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))
(- (exp (* a x)) 1.0))