e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -3.667914775029957871162604216182245853162 \cdot 10^{-8}:\\
\;\;\;\;e^{a \cdot x} - 1\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(x \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \cdot x\right)\right) + a \cdot x\\
\end{array}double f(double a, double x) {
double r85404 = a;
double r85405 = x;
double r85406 = r85404 * r85405;
double r85407 = exp(r85406);
double r85408 = 1.0;
double r85409 = r85407 - r85408;
return r85409;
}
double f(double a, double x) {
double r85410 = a;
double r85411 = x;
double r85412 = r85410 * r85411;
double r85413 = -3.667914775029958e-08;
bool r85414 = r85412 <= r85413;
double r85415 = exp(r85412);
double r85416 = 1.0;
double r85417 = r85415 - r85416;
double r85418 = 0.5;
double r85419 = 2.0;
double r85420 = pow(r85410, r85419);
double r85421 = r85418 * r85420;
double r85422 = 0.16666666666666666;
double r85423 = 3.0;
double r85424 = pow(r85410, r85423);
double r85425 = r85422 * r85424;
double r85426 = r85425 * r85411;
double r85427 = r85421 + r85426;
double r85428 = r85411 * r85427;
double r85429 = r85411 * r85428;
double r85430 = r85429 + r85412;
double r85431 = r85414 ? r85417 : r85430;
return r85431;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 5.1 |
if (* a x) < -3.667914775029958e-08Initial program 0.2
if -3.667914775029958e-08 < (* a x) Initial program 45.0
Taylor expanded around 0 14.4
Simplified11.4
rmApplied sqr-pow11.4
Applied associate-*l*7.6
Simplified7.6
Final simplification5.1
herbie shell --seed 2019305
(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))