e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.003644452020865184:\\
\;\;\;\;\log \left(e^{\frac{{\left({\left(e^{a \cdot x}\right)}^{3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\left(\left({\left(e^{a \cdot x}\right)}^{6} + {1}^{6}\right) + {\left(e^{a \cdot x}\right)}^{3} \cdot {1}^{3}\right) \cdot \left(e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1\right)}}\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 r128040 = a;
double r128041 = x;
double r128042 = r128040 * r128041;
double r128043 = exp(r128042);
double r128044 = 1.0;
double r128045 = r128043 - r128044;
return r128045;
}
double f(double a, double x) {
double r128046 = a;
double r128047 = x;
double r128048 = r128046 * r128047;
double r128049 = -0.003644452020865184;
bool r128050 = r128048 <= r128049;
double r128051 = exp(r128048);
double r128052 = 3.0;
double r128053 = pow(r128051, r128052);
double r128054 = pow(r128053, r128052);
double r128055 = 1.0;
double r128056 = pow(r128055, r128052);
double r128057 = pow(r128056, r128052);
double r128058 = r128054 - r128057;
double r128059 = 6.0;
double r128060 = pow(r128051, r128059);
double r128061 = pow(r128055, r128059);
double r128062 = r128060 + r128061;
double r128063 = r128053 * r128056;
double r128064 = r128062 + r128063;
double r128065 = r128051 + r128055;
double r128066 = r128051 * r128065;
double r128067 = r128055 * r128055;
double r128068 = r128066 + r128067;
double r128069 = r128064 * r128068;
double r128070 = r128058 / r128069;
double r128071 = exp(r128070);
double r128072 = log(r128071);
double r128073 = 0.5;
double r128074 = 2.0;
double r128075 = pow(r128046, r128074);
double r128076 = r128073 * r128075;
double r128077 = r128076 * r128047;
double r128078 = r128046 + r128077;
double r128079 = r128047 * r128078;
double r128080 = 0.16666666666666666;
double r128081 = pow(r128046, r128052);
double r128082 = pow(r128047, r128052);
double r128083 = r128081 * r128082;
double r128084 = r128080 * r128083;
double r128085 = r128079 + r128084;
double r128086 = r128050 ? r128072 : r128085;
return r128086;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 9.6 |
if (* a x) < -0.003644452020865184Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
rmApplied flip3--0.0
Applied associate-/l/0.0
Simplified0.0
rmApplied add-log-exp0.0
if -0.003644452020865184 < (* a x) Initial program 44.5
Taylor expanded around 0 14.5
Simplified14.5
Final simplification9.6
herbie shell --seed 2020034
(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))