e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -2847.816859463585387857165187597274780273:\\
\;\;\;\;\log \left(e^{e^{a \cdot x} - 1}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \left({a}^{2} \cdot x\right) \cdot \left(\frac{1}{2} + \left(\frac{1}{6} \cdot a\right) \cdot x\right)\right)\\
\end{array}double f(double a, double x) {
double r72658 = a;
double r72659 = x;
double r72660 = r72658 * r72659;
double r72661 = exp(r72660);
double r72662 = 1.0;
double r72663 = r72661 - r72662;
return r72663;
}
double f(double a, double x) {
double r72664 = a;
double r72665 = x;
double r72666 = r72664 * r72665;
double r72667 = -2847.8168594635854;
bool r72668 = r72666 <= r72667;
double r72669 = exp(r72666);
double r72670 = 1.0;
double r72671 = r72669 - r72670;
double r72672 = exp(r72671);
double r72673 = log(r72672);
double r72674 = 2.0;
double r72675 = pow(r72664, r72674);
double r72676 = r72675 * r72665;
double r72677 = 0.5;
double r72678 = 0.16666666666666666;
double r72679 = r72678 * r72664;
double r72680 = r72679 * r72665;
double r72681 = r72677 + r72680;
double r72682 = r72676 * r72681;
double r72683 = r72664 + r72682;
double r72684 = r72665 * r72683;
double r72685 = r72668 ? r72673 : r72684;
return r72685;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.3 |
|---|---|
| Target | 0.2 |
| Herbie | 3.2 |
if (* a x) < -2847.8168594635854Initial program 0
rmApplied add-log-exp0
Applied add-log-exp0
Applied diff-log0
Simplified0
if -2847.8168594635854 < (* a x) Initial program 43.7
rmApplied add-log-exp43.7
Applied add-log-exp43.9
Applied diff-log43.9
Simplified43.9
Taylor expanded around 0 14.3
Simplified4.7
Final simplification3.2
herbie shell --seed 2019303
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))