e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.0299825584401715896:\\
\;\;\;\;\frac{1}{\frac{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}{e^{\left(a \cdot x\right) \cdot 3} - {1}^{3}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\left(0.08333333333333337 \cdot \left(a \cdot x\right) - 0.5\right) + \frac{1}{a \cdot x}}\\
\end{array}double f(double a, double x) {
double r97807 = a;
double r97808 = x;
double r97809 = r97807 * r97808;
double r97810 = exp(r97809);
double r97811 = 1.0;
double r97812 = r97810 - r97811;
return r97812;
}
double f(double a, double x) {
double r97813 = a;
double r97814 = x;
double r97815 = r97813 * r97814;
double r97816 = -0.02998255844017159;
bool r97817 = r97815 <= r97816;
double r97818 = 1.0;
double r97819 = exp(r97815);
double r97820 = 1.0;
double r97821 = r97819 + r97820;
double r97822 = r97819 * r97821;
double r97823 = r97820 * r97820;
double r97824 = r97822 + r97823;
double r97825 = 3.0;
double r97826 = r97815 * r97825;
double r97827 = exp(r97826);
double r97828 = pow(r97820, r97825);
double r97829 = r97827 - r97828;
double r97830 = r97824 / r97829;
double r97831 = r97818 / r97830;
double r97832 = 0.08333333333333337;
double r97833 = r97832 * r97815;
double r97834 = 0.5;
double r97835 = r97833 - r97834;
double r97836 = r97820 / r97815;
double r97837 = r97835 + r97836;
double r97838 = r97818 / r97837;
double r97839 = r97817 ? r97831 : r97838;
return r97839;
}




Bits error versus a




Bits error versus x
Results
| Original | 28.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.8 |
if (* a x) < -0.02998255844017159Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
rmApplied pow-exp0.0
rmApplied clear-num0.0
if -0.02998255844017159 < (* a x) Initial program 44.1
rmApplied flip3--44.1
Simplified44.1
rmApplied pow-exp44.0
rmApplied clear-num44.0
Taylor expanded around 0 1.2
Simplified1.2
Final simplification0.8
herbie shell --seed 2020033
(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))