e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le \frac{-52435226478777}{2361183241434822606848}:\\
\;\;\;\;\frac{{\left(e^{\left(a \cdot x\right) \cdot 3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\left(1 \cdot \left(e^{a \cdot x} + 1\right) + {\left(e^{a \cdot x}\right)}^{2}\right) \cdot \left(\left({\left(e^{a \cdot x}\right)}^{6} + {1}^{6}\right) + e^{\left(a \cdot x\right) \cdot 3} \cdot {1}^{3}\right)}\\
\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 r64008 = a;
double r64009 = x;
double r64010 = r64008 * r64009;
double r64011 = exp(r64010);
double r64012 = 1.0;
double r64013 = r64011 - r64012;
return r64013;
}
double f(double a, double x) {
double r64014 = a;
double r64015 = x;
double r64016 = r64014 * r64015;
double r64017 = -52435226478777.0;
double r64018 = 2.3611832414348226e+21;
double r64019 = r64017 / r64018;
bool r64020 = r64016 <= r64019;
double r64021 = 3.0;
double r64022 = r64016 * r64021;
double r64023 = exp(r64022);
double r64024 = pow(r64023, r64021);
double r64025 = 1.0;
double r64026 = pow(r64025, r64021);
double r64027 = pow(r64026, r64021);
double r64028 = r64024 - r64027;
double r64029 = exp(r64016);
double r64030 = r64029 + r64025;
double r64031 = r64025 * r64030;
double r64032 = 2.0;
double r64033 = pow(r64029, r64032);
double r64034 = r64031 + r64033;
double r64035 = 6.0;
double r64036 = pow(r64029, r64035);
double r64037 = pow(r64025, r64035);
double r64038 = r64036 + r64037;
double r64039 = r64023 * r64026;
double r64040 = r64038 + r64039;
double r64041 = r64034 * r64040;
double r64042 = r64028 / r64041;
double r64043 = 0.5;
double r64044 = pow(r64014, r64032);
double r64045 = r64043 * r64044;
double r64046 = r64045 * r64015;
double r64047 = r64014 + r64046;
double r64048 = r64015 * r64047;
double r64049 = 0.16666666666666666;
double r64050 = pow(r64014, r64021);
double r64051 = pow(r64015, r64021);
double r64052 = r64050 * r64051;
double r64053 = r64049 * r64052;
double r64054 = r64048 + r64053;
double r64055 = r64020 ? r64042 : r64054;
return r64055;
}




Bits error versus a




Bits error versus x
Results
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 9.4 |
if (* a x) < -2.2207182212132606e-08Initial program 0.3
rmApplied flip3--0.3
Simplified0.3
rmApplied pow-exp0.3
rmApplied flip3--0.3
Applied associate-/l/0.3
Simplified0.3
if -2.2207182212132606e-08 < (* a x) Initial program 44.1
Taylor expanded around 0 14.3
Simplified14.3
Final simplification9.4
herbie shell --seed 2019304
(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))