e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \le -1.8775905144238698 \cdot 10^{82} \lor \neg \left(a \le 6913276300.6773567\right):\\
\;\;\;\;\frac{\frac{\left(\sqrt{e^{\left(a \cdot x\right) \cdot 6}} + \sqrt{{1}^{6}}\right) \cdot \left(\sqrt{e^{\left(a \cdot x\right) \cdot 6}} - \sqrt{{1}^{6}}\right)}{\mathsf{fma}\left(1 \cdot 1, \mathsf{fma}\left(1, 1, e^{2 \cdot \left(x \cdot a\right)}\right), e^{\left(a \cdot x\right) \cdot 4}\right)}}{1 + e^{x \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{18 \cdot {\left(x \cdot a\right)}^{2} + \mathsf{fma}\left(36, {\left(x \cdot a\right)}^{3}, 6 \cdot \left(a \cdot x\right)\right)}{\mathsf{fma}\left(1 \cdot 1, \mathsf{fma}\left(1, 1, e^{2 \cdot \left(x \cdot a\right)}\right), e^{\left(a \cdot x\right) \cdot 4}\right)}}{1 + e^{x \cdot a}}\\
\end{array}double f(double a, double x) {
double r97807 = a;
double r97808 = x;
double r97809 = r97807 * r97808;
double r97810 = exp(r97809);
double r97811 = 1.0;
double r97812 = r97810 - r97811;
return r97812;
}
double f(double a, double x) {
double r97813 = a;
double r97814 = -1.8775905144238698e+82;
bool r97815 = r97813 <= r97814;
double r97816 = 6913276300.677357;
bool r97817 = r97813 <= r97816;
double r97818 = !r97817;
bool r97819 = r97815 || r97818;
double r97820 = x;
double r97821 = r97813 * r97820;
double r97822 = 6.0;
double r97823 = r97821 * r97822;
double r97824 = exp(r97823);
double r97825 = sqrt(r97824);
double r97826 = 1.0;
double r97827 = pow(r97826, r97822);
double r97828 = sqrt(r97827);
double r97829 = r97825 + r97828;
double r97830 = r97825 - r97828;
double r97831 = r97829 * r97830;
double r97832 = r97826 * r97826;
double r97833 = 2.0;
double r97834 = r97820 * r97813;
double r97835 = r97833 * r97834;
double r97836 = exp(r97835);
double r97837 = fma(r97826, r97826, r97836);
double r97838 = 4.0;
double r97839 = r97821 * r97838;
double r97840 = exp(r97839);
double r97841 = fma(r97832, r97837, r97840);
double r97842 = r97831 / r97841;
double r97843 = exp(r97834);
double r97844 = r97826 + r97843;
double r97845 = r97842 / r97844;
double r97846 = 18.0;
double r97847 = pow(r97834, r97833);
double r97848 = r97846 * r97847;
double r97849 = 36.0;
double r97850 = 3.0;
double r97851 = pow(r97834, r97850);
double r97852 = r97822 * r97821;
double r97853 = fma(r97849, r97851, r97852);
double r97854 = r97848 + r97853;
double r97855 = r97854 / r97841;
double r97856 = r97855 / r97844;
double r97857 = r97819 ? r97845 : r97856;
return r97857;
}




Bits error versus a




Bits error versus x
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 14.4 |
if a < -1.8775905144238698e+82 or 6913276300.677357 < a Initial program 20.2
rmApplied flip--20.2
Simplified20.1
Simplified20.1
rmApplied flip3--20.2
Simplified20.1
Simplified20.1
rmApplied add-sqr-sqrt20.1
Applied add-sqr-sqrt20.2
Applied difference-of-squares20.2
if -1.8775905144238698e+82 < a < 6913276300.677357Initial program 33.5
rmApplied flip--33.5
Simplified33.5
Simplified33.5
rmApplied flip3--33.5
Simplified33.4
Simplified33.4
Taylor expanded around 0 18.7
Simplified15.5
rmApplied fma-udef15.5
Simplified11.3
Final simplification14.4
herbie shell --seed 2020046 +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))