e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.3564141224269422036918797402904601767659:\\
\;\;\;\;e^{a \cdot x} - 1\\
\mathbf{else}:\\
\;\;\;\;\left(a + \frac{1}{2} \cdot \left(a \cdot \left(a \cdot x\right)\right)\right) \cdot x\\
\end{array}double f(double a, double x) {
double r37853 = a;
double r37854 = x;
double r37855 = r37853 * r37854;
double r37856 = exp(r37855);
double r37857 = 1.0;
double r37858 = r37856 - r37857;
return r37858;
}
double f(double a, double x) {
double r37859 = a;
double r37860 = x;
double r37861 = r37859 * r37860;
double r37862 = -0.3564141224269422;
bool r37863 = r37861 <= r37862;
double r37864 = exp(r37861);
double r37865 = 1.0;
double r37866 = r37864 - r37865;
double r37867 = 0.5;
double r37868 = r37859 * r37861;
double r37869 = r37867 * r37868;
double r37870 = r37859 + r37869;
double r37871 = r37870 * r37860;
double r37872 = r37863 ? r37866 : r37871;
return r37872;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
if (* a x) < -0.3564141224269422Initial program 0.0
if -0.3564141224269422 < (* a x) Initial program 44.0
Taylor expanded around 0 14.5
Simplified14.5
Taylor expanded around 0 8.4
Simplified8.4
rmApplied associate-*l*4.8
Simplified1.0
Taylor expanded around inf 8.4
Simplified1.0
Final simplification0.6
herbie shell --seed 2019196
(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))