e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.883670130696454110254072018681462839622 \cdot 10^{-19} \lor \neg \left(a \cdot x \le 5.145272381710981521082629097103889956475 \cdot 10^{-33}\right):\\
\;\;\;\;\frac{\left({\left(e^{a \cdot x}\right)}^{\frac{3}{2}} + \sqrt{{1}^{3}}\right) \cdot \left(e^{\frac{3}{2} \cdot \left(a \cdot x\right)} - \sqrt{1}\right)}{e^{a \cdot x} \cdot \left(\sqrt{e^{a \cdot x}} \cdot \sqrt{e^{a \cdot x}} + 1\right) + 1 \cdot 1}\\
\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 r85558 = a;
double r85559 = x;
double r85560 = r85558 * r85559;
double r85561 = exp(r85560);
double r85562 = 1.0;
double r85563 = r85561 - r85562;
return r85563;
}
double f(double a, double x) {
double r85564 = a;
double r85565 = x;
double r85566 = r85564 * r85565;
double r85567 = -6.883670130696454e-19;
bool r85568 = r85566 <= r85567;
double r85569 = 5.1452723817109815e-33;
bool r85570 = r85566 <= r85569;
double r85571 = !r85570;
bool r85572 = r85568 || r85571;
double r85573 = exp(r85566);
double r85574 = 1.5;
double r85575 = pow(r85573, r85574);
double r85576 = 1.0;
double r85577 = 3.0;
double r85578 = pow(r85576, r85577);
double r85579 = sqrt(r85578);
double r85580 = r85575 + r85579;
double r85581 = r85574 * r85566;
double r85582 = exp(r85581);
double r85583 = sqrt(r85576);
double r85584 = r85582 - r85583;
double r85585 = r85580 * r85584;
double r85586 = sqrt(r85573);
double r85587 = r85586 * r85586;
double r85588 = r85587 + r85576;
double r85589 = r85573 * r85588;
double r85590 = r85576 * r85576;
double r85591 = r85589 + r85590;
double r85592 = r85585 / r85591;
double r85593 = 0.5;
double r85594 = 2.0;
double r85595 = pow(r85564, r85594);
double r85596 = r85593 * r85595;
double r85597 = r85596 * r85565;
double r85598 = r85564 + r85597;
double r85599 = r85565 * r85598;
double r85600 = 0.16666666666666666;
double r85601 = pow(r85564, r85577);
double r85602 = pow(r85565, r85577);
double r85603 = r85601 * r85602;
double r85604 = r85600 * r85603;
double r85605 = r85599 + r85604;
double r85606 = r85572 ? r85592 : r85605;
return r85606;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 9.7 |
if (* a x) < -6.883670130696454e-19 or 5.1452723817109815e-33 < (* a x) Initial program 5.2
rmApplied flip3--5.3
Simplified5.3
rmApplied add-sqr-sqrt5.3
Applied sqr-pow5.3
Applied difference-of-squares5.3
Simplified5.3
Simplified5.3
Taylor expanded around inf 5.2
rmApplied add-sqr-sqrt5.2
if -6.883670130696454e-19 < (* a x) < 5.1452723817109815e-33Initial program 45.3
Taylor expanded around 0 12.6
Simplified12.6
Final simplification9.7
herbie shell --seed 2019353
(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))