e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.00565259617492738353:\\
\;\;\;\;\frac{e^{2 \cdot \left(x \cdot a\right)} - 1 \cdot 1}{e^{a \cdot x} + 1}\\
\mathbf{elif}\;a \cdot x \le 6.429099761039471 \cdot 10^{-102}:\\
\;\;\;\;\frac{1}{2} \cdot \left({a}^{2} \cdot {x}^{2}\right) + a \cdot x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + x \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \cdot x\right)\right)\\
\end{array}double f(double a, double x) {
double r101970 = a;
double r101971 = x;
double r101972 = r101970 * r101971;
double r101973 = exp(r101972);
double r101974 = 1.0;
double r101975 = r101973 - r101974;
return r101975;
}
double f(double a, double x) {
double r101976 = a;
double r101977 = x;
double r101978 = r101976 * r101977;
double r101979 = -0.0056525961749273835;
bool r101980 = r101978 <= r101979;
double r101981 = 2.0;
double r101982 = r101977 * r101976;
double r101983 = r101981 * r101982;
double r101984 = exp(r101983);
double r101985 = 1.0;
double r101986 = r101985 * r101985;
double r101987 = r101984 - r101986;
double r101988 = exp(r101978);
double r101989 = r101988 + r101985;
double r101990 = r101987 / r101989;
double r101991 = 6.429099761039471e-102;
bool r101992 = r101978 <= r101991;
double r101993 = 0.5;
double r101994 = pow(r101976, r101981);
double r101995 = pow(r101977, r101981);
double r101996 = r101994 * r101995;
double r101997 = r101993 * r101996;
double r101998 = r101997 + r101978;
double r101999 = r101993 * r101994;
double r102000 = 0.16666666666666666;
double r102001 = 3.0;
double r102002 = pow(r101976, r102001);
double r102003 = r102000 * r102002;
double r102004 = r102003 * r101977;
double r102005 = r101999 + r102004;
double r102006 = r101977 * r102005;
double r102007 = r101976 + r102006;
double r102008 = r101977 * r102007;
double r102009 = r101992 ? r101998 : r102008;
double r102010 = r101980 ? r101990 : r102009;
return r102010;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 5.3 |
if (* a x) < -0.0056525961749273835Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.0056525961749273835 < (* a x) < 6.429099761039471e-102Initial program 42.7
Taylor expanded around 0 10.6
Simplified5.4
Taylor expanded around 0 5.6
if 6.429099761039471e-102 < (* a x) Initial program 53.5
Taylor expanded around 0 35.0
Simplified20.8
Final simplification5.3
herbie shell --seed 2020042
(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))