e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \le -1.19588563424716459 \cdot 10^{42}:\\
\;\;\;\;\frac{e^{\left(a \cdot x\right) \cdot 4} - {1}^{4}}{\sqrt{e^{a \cdot x} + 1}} \cdot \frac{\frac{1}{\mathsf{fma}\left(1, 1, e^{x \cdot \left(2 \cdot a\right)}\right)}}{\sqrt{e^{a \cdot x} + 1}}\\
\mathbf{elif}\;a \le 6.8038182321282743 \cdot 10^{-263}:\\
\;\;\;\;\mathsf{fma}\left(x, a, {x}^{2} \cdot \left(\left(\frac{1}{6} \cdot {a}^{3}\right) \cdot x + \frac{1}{2} \cdot {a}^{2}\right)\right)\\
\mathbf{elif}\;a \le 2.34411061506686651 \cdot 10^{-154}:\\
\;\;\;\;\frac{\frac{\frac{{\left({\left(e^{a \cdot x}\right)}^{8}\right)}^{3} - {\left({1}^{8}\right)}^{3}}{\mathsf{fma}\left({1}^{8}, {\left(e^{a \cdot x}\right)}^{8}, {\left(e^{a \cdot x}\right)}^{16} + {1}^{16}\right)}}{\mathsf{fma}\left(1, 1, e^{x \cdot \left(2 \cdot a\right)}\right) \cdot \left(e^{\left(a \cdot x\right) \cdot 4} + {1}^{4}\right)}}{e^{a \cdot x} + 1}\\
\mathbf{elif}\;a \le 5.46227838415382305 \cdot 10^{102}:\\
\;\;\;\;\mathsf{fma}\left(x, a, {x}^{2} \cdot \left(\left(\frac{1}{6} \cdot {a}^{3}\right) \cdot x + \frac{1}{2} \cdot {a}^{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{e^{\left(a \cdot x\right) \cdot 6} - {1}^{6}}{\mathsf{fma}\left(1 \cdot 1, \mathsf{fma}\left(1, 1, e^{x \cdot \left(2 \cdot a\right)}\right), e^{\left(a \cdot x\right) \cdot 4}\right)}}{e^{a \cdot x} + 1}\\
\end{array}double f(double a, double x) {
double r111737 = a;
double r111738 = x;
double r111739 = r111737 * r111738;
double r111740 = exp(r111739);
double r111741 = 1.0;
double r111742 = r111740 - r111741;
return r111742;
}
double f(double a, double x) {
double r111743 = a;
double r111744 = -1.1958856342471646e+42;
bool r111745 = r111743 <= r111744;
double r111746 = x;
double r111747 = r111743 * r111746;
double r111748 = 4.0;
double r111749 = r111747 * r111748;
double r111750 = exp(r111749);
double r111751 = 1.0;
double r111752 = pow(r111751, r111748);
double r111753 = r111750 - r111752;
double r111754 = exp(r111747);
double r111755 = r111754 + r111751;
double r111756 = sqrt(r111755);
double r111757 = r111753 / r111756;
double r111758 = 1.0;
double r111759 = 2.0;
double r111760 = r111759 * r111743;
double r111761 = r111746 * r111760;
double r111762 = exp(r111761);
double r111763 = fma(r111751, r111751, r111762);
double r111764 = r111758 / r111763;
double r111765 = r111764 / r111756;
double r111766 = r111757 * r111765;
double r111767 = 6.803818232128274e-263;
bool r111768 = r111743 <= r111767;
double r111769 = pow(r111746, r111759);
double r111770 = 0.16666666666666666;
double r111771 = 3.0;
double r111772 = pow(r111743, r111771);
double r111773 = r111770 * r111772;
double r111774 = r111773 * r111746;
double r111775 = 0.5;
double r111776 = pow(r111743, r111759);
double r111777 = r111775 * r111776;
double r111778 = r111774 + r111777;
double r111779 = r111769 * r111778;
double r111780 = fma(r111746, r111743, r111779);
double r111781 = 2.3441106150668665e-154;
bool r111782 = r111743 <= r111781;
double r111783 = 8.0;
double r111784 = pow(r111754, r111783);
double r111785 = pow(r111784, r111771);
double r111786 = pow(r111751, r111783);
double r111787 = pow(r111786, r111771);
double r111788 = r111785 - r111787;
double r111789 = 16.0;
double r111790 = pow(r111754, r111789);
double r111791 = pow(r111751, r111789);
double r111792 = r111790 + r111791;
double r111793 = fma(r111786, r111784, r111792);
double r111794 = r111788 / r111793;
double r111795 = r111750 + r111752;
double r111796 = r111763 * r111795;
double r111797 = r111794 / r111796;
double r111798 = r111797 / r111755;
double r111799 = 5.462278384153823e+102;
bool r111800 = r111743 <= r111799;
double r111801 = 6.0;
double r111802 = r111747 * r111801;
double r111803 = exp(r111802);
double r111804 = pow(r111751, r111801);
double r111805 = r111803 - r111804;
double r111806 = r111751 * r111751;
double r111807 = fma(r111806, r111763, r111750);
double r111808 = r111805 / r111807;
double r111809 = r111808 / r111755;
double r111810 = r111800 ? r111780 : r111809;
double r111811 = r111782 ? r111798 : r111810;
double r111812 = r111768 ? r111780 : r111811;
double r111813 = r111745 ? r111766 : r111812;
return r111813;
}




Bits error versus a




Bits error versus x
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 18.5 |
if a < -1.1958856342471646e+42Initial program 19.7
rmApplied flip--19.8
Simplified19.7
rmApplied flip--19.8
Simplified19.7
Simplified19.7
rmApplied add-sqr-sqrt19.7
Applied div-inv19.7
Applied times-frac19.7
if -1.1958856342471646e+42 < a < 6.803818232128274e-263 or 2.3441106150668665e-154 < a < 5.462278384153823e+102Initial program 35.5
Taylor expanded around 0 19.4
Simplified16.4
if 6.803818232128274e-263 < a < 2.3441106150668665e-154Initial program 32.3
rmApplied flip--32.3
Simplified32.3
rmApplied flip--32.3
Simplified32.2
Simplified32.2
rmApplied flip--32.2
Applied associate-/l/32.2
rmApplied flip3--32.3
Simplified32.4
Simplified32.4
if 5.462278384153823e+102 < a Initial program 15.0
rmApplied flip--15.0
Simplified14.9
rmApplied flip3--14.9
Simplified14.8
Simplified14.8
Final simplification18.5
herbie shell --seed 2020043 +o rules:numerics
(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))