e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -2.123751652327250920140389641582734370218 \cdot 10^{-7}:\\
\;\;\;\;e^{a \cdot x} - 1\\
\mathbf{else}:\\
\;\;\;\;a \cdot x\\
\end{array}double f(double a, double x) {
double r64436 = a;
double r64437 = x;
double r64438 = r64436 * r64437;
double r64439 = exp(r64438);
double r64440 = 1.0;
double r64441 = r64439 - r64440;
return r64441;
}
double f(double a, double x) {
double r64442 = a;
double r64443 = x;
double r64444 = r64442 * r64443;
double r64445 = -2.123751652327251e-07;
bool r64446 = r64444 <= r64445;
double r64447 = exp(r64444);
double r64448 = 1.0;
double r64449 = r64447 - r64448;
double r64450 = r64446 ? r64449 : r64444;
return r64450;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.8 |
if (* a x) < -2.123751652327251e-07Initial program 0.2
if -2.123751652327251e-07 < (* a x) Initial program 44.4
Taylor expanded around 0 14.0
Simplified14.0
Taylor expanded around 0 7.7
Simplified7.7
Taylor expanded around 0 1.2
Final simplification0.8
herbie shell --seed 2019194
(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))