e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.03513580389188739050432275234925327822566:\\
\;\;\;\;e^{a \cdot x} - 1\\
\mathbf{else}:\\
\;\;\;\;a \cdot x\\
\end{array}double f(double a, double x) {
double r213584 = a;
double r213585 = x;
double r213586 = r213584 * r213585;
double r213587 = exp(r213586);
double r213588 = 1.0;
double r213589 = r213587 - r213588;
return r213589;
}
double f(double a, double x) {
double r213590 = a;
double r213591 = x;
double r213592 = r213590 * r213591;
double r213593 = -0.03513580389188739;
bool r213594 = r213592 <= r213593;
double r213595 = exp(r213592);
double r213596 = 1.0;
double r213597 = r213595 - r213596;
double r213598 = r213594 ? r213597 : r213592;
return r213598;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 1.0 |
if (* a x) < -0.03513580389188739Initial program 0.0
if -0.03513580389188739 < (* a x) Initial program 44.4
Taylor expanded around 0 14.4
Simplified14.4
Taylor expanded around 0 8.2
Simplified8.2
Taylor expanded around 0 1.5
Final simplification1.0
herbie shell --seed 2019179
(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))