e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.030443421023876352958167923468124627107 \cdot 10^{-6} \lor \neg \left(a \cdot x \le 2.106168723861143240310319851371754358155 \cdot 10^{-28}\right):\\
\;\;\;\;\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\
\end{array}double f(double a, double x) {
double r87974 = a;
double r87975 = x;
double r87976 = r87974 * r87975;
double r87977 = exp(r87976);
double r87978 = 1.0;
double r87979 = r87977 - r87978;
return r87979;
}
double f(double a, double x) {
double r87980 = a;
double r87981 = x;
double r87982 = r87980 * r87981;
double r87983 = -1.0304434210238764e-06;
bool r87984 = r87982 <= r87983;
double r87985 = 2.1061687238611432e-28;
bool r87986 = r87982 <= r87985;
double r87987 = !r87986;
bool r87988 = r87984 || r87987;
double r87989 = exp(r87982);
double r87990 = 3.0;
double r87991 = pow(r87989, r87990);
double r87992 = 1.0;
double r87993 = pow(r87992, r87990);
double r87994 = r87991 - r87993;
double r87995 = r87989 + r87992;
double r87996 = r87989 * r87995;
double r87997 = r87992 * r87992;
double r87998 = r87996 + r87997;
double r87999 = r87994 / r87998;
double r88000 = 0.5;
double r88001 = 2.0;
double r88002 = pow(r87980, r88001);
double r88003 = r88000 * r88002;
double r88004 = r88003 * r87981;
double r88005 = r87980 + r88004;
double r88006 = r87981 * r88005;
double r88007 = 0.16666666666666666;
double r88008 = pow(r87980, r87990);
double r88009 = pow(r87981, r87990);
double r88010 = r88008 * r88009;
double r88011 = r88007 * r88010;
double r88012 = r88006 + r88011;
double r88013 = r87988 ? r87999 : r88012;
return r88013;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 9.1 |
if (* a x) < -1.0304434210238764e-06Initial program 0.2
rmApplied flip3--0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
rmApplied add-log-exp0.2
Applied add-log-exp0.2
Applied diff-log0.2
Simplified0.2
if -1.0304434210238764e-06 < (* a x) < 2.1061687238611432e-28Initial program 45.1
Taylor expanded around 0 12.6
Simplified12.6
if 2.1061687238611432e-28 < (* a x) Initial program 36.0
rmApplied flip3--37.6
Simplified37.6
rmApplied add-cbrt-cube38.2
Simplified38.2
Final simplification9.1
herbie shell --seed 2019291
(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))