e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.01718427484698143575814199834894679952413:\\
\;\;\;\;\log \left(e^{e^{a \cdot x} - 1}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(\frac{1}{2}, \left(a \cdot x\right) \cdot a, a\right)\\
\end{array}double f(double a, double x) {
double r77486 = a;
double r77487 = x;
double r77488 = r77486 * r77487;
double r77489 = exp(r77488);
double r77490 = 1.0;
double r77491 = r77489 - r77490;
return r77491;
}
double f(double a, double x) {
double r77492 = a;
double r77493 = x;
double r77494 = r77492 * r77493;
double r77495 = -0.017184274846981436;
bool r77496 = r77494 <= r77495;
double r77497 = exp(r77494);
double r77498 = 1.0;
double r77499 = r77497 - r77498;
double r77500 = exp(r77499);
double r77501 = log(r77500);
double r77502 = 0.5;
double r77503 = r77494 * r77492;
double r77504 = fma(r77502, r77503, r77492);
double r77505 = r77493 * r77504;
double r77506 = r77496 ? r77501 : r77505;
return r77506;
}




Bits error versus a




Bits error versus x
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
if (* a x) < -0.017184274846981436Initial program 0.0
rmApplied add-log-exp0.0
Applied add-log-exp0.0
Applied diff-log0.0
Simplified0.0
if -0.017184274846981436 < (* a x) Initial program 44.7
Taylor expanded around 0 15.0
Simplified11.9
Taylor expanded around 0 9.0
Simplified4.9
rmApplied unpow24.9
Applied associate-*r*0.9
Simplified0.9
Final simplification0.6
herbie shell --seed 2019322 +o rules:numerics
(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))