e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -3.32894132256475227 \cdot 10^{-11}:\\
\;\;\;\;\frac{\frac{{\left(e^{\left(a \cdot x\right) \cdot 3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\left({\left(e^{a \cdot x}\right)}^{6} + e^{\left(a \cdot x\right) \cdot 3} \cdot {1}^{3}\right) + {1}^{6}}}{e^{a \cdot x} \cdot \left(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 r107584 = a;
double r107585 = x;
double r107586 = r107584 * r107585;
double r107587 = exp(r107586);
double r107588 = 1.0;
double r107589 = r107587 - r107588;
return r107589;
}
double f(double a, double x) {
double r107590 = a;
double r107591 = x;
double r107592 = r107590 * r107591;
double r107593 = -3.328941322564752e-11;
bool r107594 = r107592 <= r107593;
double r107595 = 3.0;
double r107596 = r107592 * r107595;
double r107597 = exp(r107596);
double r107598 = pow(r107597, r107595);
double r107599 = 1.0;
double r107600 = pow(r107599, r107595);
double r107601 = pow(r107600, r107595);
double r107602 = r107598 - r107601;
double r107603 = exp(r107592);
double r107604 = 6.0;
double r107605 = pow(r107603, r107604);
double r107606 = r107597 * r107600;
double r107607 = r107605 + r107606;
double r107608 = pow(r107599, r107604);
double r107609 = r107607 + r107608;
double r107610 = r107602 / r107609;
double r107611 = r107603 + r107599;
double r107612 = r107603 * r107611;
double r107613 = r107599 * r107599;
double r107614 = r107612 + r107613;
double r107615 = r107610 / r107614;
double r107616 = 0.5;
double r107617 = 2.0;
double r107618 = pow(r107590, r107617);
double r107619 = r107616 * r107618;
double r107620 = r107619 * r107591;
double r107621 = r107590 + r107620;
double r107622 = r107591 * r107621;
double r107623 = 0.16666666666666666;
double r107624 = pow(r107590, r107595);
double r107625 = pow(r107591, r107595);
double r107626 = r107624 * r107625;
double r107627 = r107623 * r107626;
double r107628 = r107622 + r107627;
double r107629 = r107594 ? r107615 : r107628;
return r107629;
}




Bits error versus a




Bits error versus x
Results
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 9.4 |
if (* a x) < -3.328941322564752e-11Initial program 0.6
rmApplied flip3--0.6
Simplified0.6
rmApplied pow-exp0.5
rmApplied flip3--0.5
Simplified0.5
if -3.328941322564752e-11 < (* a x) Initial program 44.0
Taylor expanded around 0 14.2
Simplified14.2
Final simplification9.4
herbie shell --seed 2020046
(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))