e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.000117228758051702:\\
\;\;\;\;\frac{e^{a \cdot x} - 1}{\sqrt{e^{a \cdot x} + 1}} \cdot \frac{e^{a \cdot x} + 1}{\sqrt{e^{a \cdot x} + 1}}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + \left(\left(\left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) \cdot \frac{1}{6} + \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right) \cdot \frac{1}{2}\right)\\
\end{array}double f(double a, double x) {
double r4053881 = a;
double r4053882 = x;
double r4053883 = r4053881 * r4053882;
double r4053884 = exp(r4053883);
double r4053885 = 1.0;
double r4053886 = r4053884 - r4053885;
return r4053886;
}
double f(double a, double x) {
double r4053887 = a;
double r4053888 = x;
double r4053889 = r4053887 * r4053888;
double r4053890 = -0.000117228758051702;
bool r4053891 = r4053889 <= r4053890;
double r4053892 = exp(r4053889);
double r4053893 = 1.0;
double r4053894 = r4053892 - r4053893;
double r4053895 = r4053892 + r4053893;
double r4053896 = sqrt(r4053895);
double r4053897 = r4053894 / r4053896;
double r4053898 = r4053895 / r4053896;
double r4053899 = r4053897 * r4053898;
double r4053900 = r4053889 * r4053889;
double r4053901 = r4053889 * r4053900;
double r4053902 = 0.16666666666666666;
double r4053903 = r4053901 * r4053902;
double r4053904 = 0.5;
double r4053905 = r4053900 * r4053904;
double r4053906 = r4053903 + r4053905;
double r4053907 = r4053889 + r4053906;
double r4053908 = r4053891 ? r4053899 : r4053907;
return r4053908;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.3 |
if (* a x) < -0.000117228758051702Initial program 0.0
rmApplied flip--0.0
Simplified0.0
rmApplied add-sqr-sqrt0.0
Applied difference-of-sqr--10.0
Applied times-frac0.0
if -0.000117228758051702 < (* a x) Initial program 44.3
Taylor expanded around 0 13.7
Simplified0.4
Final simplification0.3
herbie shell --seed 2019130
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-target
(if (< (fabs (* a x)) 1/10) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))