e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -7.1307752378243545 \cdot 10^{-9}:\\
\;\;\;\;\log \left(e^{e^{a \cdot x} - 1}\right)\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + \frac{1}{6} \cdot {\left(a \cdot x\right)}^{3}\\
\end{array}double f(double a, double x) {
double r101656 = a;
double r101657 = x;
double r101658 = r101656 * r101657;
double r101659 = exp(r101658);
double r101660 = 1.0;
double r101661 = r101659 - r101660;
return r101661;
}
double f(double a, double x) {
double r101662 = a;
double r101663 = x;
double r101664 = r101662 * r101663;
double r101665 = -7.1307752378243545e-09;
bool r101666 = r101664 <= r101665;
double r101667 = exp(r101664);
double r101668 = 1.0;
double r101669 = r101667 - r101668;
double r101670 = exp(r101669);
double r101671 = log(r101670);
double r101672 = 0.16666666666666666;
double r101673 = 3.0;
double r101674 = pow(r101664, r101673);
double r101675 = r101672 * r101674;
double r101676 = r101664 + r101675;
double r101677 = r101666 ? r101671 : r101676;
return r101677;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.8 |
if (* a x) < -7.1307752378243545e-09Initial program 0.3
rmApplied add-log-exp0.3
Applied add-log-exp0.4
Applied diff-log0.4
Simplified0.4
if -7.1307752378243545e-09 < (* a x) Initial program 44.5
Taylor expanded around 0 14.2
Simplified14.2
rmApplied pow-prod-down4.2
Taylor expanded around 0 1.0
Final simplification0.8
herbie shell --seed 2020059
(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))