e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;x \le -4.769746002479849413485688169289897765182 \cdot 10^{75}:\\
\;\;\;\;\frac{\frac{e^{3 \cdot \left(\left(3 \cdot a\right) \cdot x\right)} - 1 \cdot \left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right)}{\mathsf{fma}\left(e^{\left(3 \cdot a\right) \cdot x}, e^{\left(3 \cdot a\right) \cdot x}, \left(1 \cdot 1\right) \cdot \mathsf{fma}\left(1 \cdot 1, 1 \cdot 1, 1 \cdot e^{\left(3 \cdot a\right) \cdot x}\right)\right)}}{\mathsf{fma}\left(e^{a \cdot x}, e^{a \cdot x}, \left(1 + e^{a \cdot x}\right) \cdot 1\right)}\\
\mathbf{elif}\;x \le -2.773503098171754549439485465195885024121 \cdot 10^{-34}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, \left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right), \mathsf{fma}\left(\frac{1}{2}, \left(a \cdot x\right) \cdot \left(a \cdot x\right), a \cdot x\right)\right)\\
\mathbf{elif}\;x \le -2.253008826999895251155572445945559152759 \cdot 10^{-43}:\\
\;\;\;\;\frac{\frac{e^{3 \cdot \left(\left(3 \cdot a\right) \cdot x\right)} - 1 \cdot \left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right)}{\mathsf{fma}\left(e^{\left(3 \cdot a\right) \cdot x}, e^{\left(3 \cdot a\right) \cdot x}, \left(1 \cdot 1\right) \cdot \mathsf{fma}\left(1 \cdot 1, 1 \cdot 1, 1 \cdot e^{\left(3 \cdot a\right) \cdot x}\right)\right)}}{\mathsf{fma}\left(e^{a \cdot x}, e^{a \cdot x}, \left(1 + e^{a \cdot x}\right) \cdot 1\right)}\\
\mathbf{elif}\;x \le 1.615963223807510020381636500169761159394 \cdot 10^{101}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, \left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right), \mathsf{fma}\left(\frac{1}{2}, \left(a \cdot x\right) \cdot \left(a \cdot x\right), a \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{e^{\left(9 \cdot \left(a \cdot x\right) + 9 \cdot \left(a \cdot x\right)\right) + 9 \cdot \left(a \cdot x\right)} - \left(\left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right) \cdot \left(\left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right) \cdot \left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right)\right)\right) \cdot \left(1 \cdot \left(1 \cdot 1\right)\right)}{\mathsf{fma}\left(e^{9 \cdot \left(a \cdot x\right)}, e^{9 \cdot \left(a \cdot x\right)}, \left(e^{9 \cdot \left(a \cdot x\right)} + 1 \cdot \left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right)\right) \cdot \left(1 \cdot \left(\left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right) \cdot \left(\left(1 \cdot 1\right) \cdot \left(1 \cdot 1\right)\right)\right)\right)\right)}}{\mathsf{fma}\left(e^{\left(3 \cdot a\right) \cdot x}, e^{\left(3 \cdot a\right) \cdot x}, \left(1 \cdot 1\right) \cdot \mathsf{fma}\left(1 \cdot 1, 1 \cdot 1, 1 \cdot e^{\left(3 \cdot a\right) \cdot x}\right)\right)}}{\mathsf{fma}\left(e^{a \cdot x}, e^{a \cdot x}, \left(1 + e^{a \cdot x}\right) \cdot 1\right)}\\
\end{array}double f(double a, double x) {
double r4872905 = a;
double r4872906 = x;
double r4872907 = r4872905 * r4872906;
double r4872908 = exp(r4872907);
double r4872909 = 1.0;
double r4872910 = r4872908 - r4872909;
return r4872910;
}
double f(double a, double x) {
double r4872911 = x;
double r4872912 = -4.7697460024798494e+75;
bool r4872913 = r4872911 <= r4872912;
double r4872914 = 3.0;
double r4872915 = a;
double r4872916 = r4872914 * r4872915;
double r4872917 = r4872916 * r4872911;
double r4872918 = r4872914 * r4872917;
double r4872919 = exp(r4872918);
double r4872920 = 1.0;
double r4872921 = r4872920 * r4872920;
double r4872922 = r4872921 * r4872921;
double r4872923 = r4872922 * r4872922;
double r4872924 = r4872920 * r4872923;
double r4872925 = r4872919 - r4872924;
double r4872926 = exp(r4872917);
double r4872927 = r4872920 * r4872926;
double r4872928 = fma(r4872921, r4872921, r4872927);
double r4872929 = r4872921 * r4872928;
double r4872930 = fma(r4872926, r4872926, r4872929);
double r4872931 = r4872925 / r4872930;
double r4872932 = r4872915 * r4872911;
double r4872933 = exp(r4872932);
double r4872934 = r4872920 + r4872933;
double r4872935 = r4872934 * r4872920;
double r4872936 = fma(r4872933, r4872933, r4872935);
double r4872937 = r4872931 / r4872936;
double r4872938 = -2.7735030981717545e-34;
bool r4872939 = r4872911 <= r4872938;
double r4872940 = 0.16666666666666666;
double r4872941 = r4872932 * r4872932;
double r4872942 = r4872932 * r4872941;
double r4872943 = 0.5;
double r4872944 = fma(r4872943, r4872941, r4872932);
double r4872945 = fma(r4872940, r4872942, r4872944);
double r4872946 = -2.2530088269998953e-43;
bool r4872947 = r4872911 <= r4872946;
double r4872948 = 1.61596322380751e+101;
bool r4872949 = r4872911 <= r4872948;
double r4872950 = 9.0;
double r4872951 = r4872950 * r4872932;
double r4872952 = r4872951 + r4872951;
double r4872953 = r4872952 + r4872951;
double r4872954 = exp(r4872953);
double r4872955 = r4872923 * r4872923;
double r4872956 = r4872923 * r4872955;
double r4872957 = r4872920 * r4872921;
double r4872958 = r4872956 * r4872957;
double r4872959 = r4872954 - r4872958;
double r4872960 = exp(r4872951);
double r4872961 = r4872960 + r4872924;
double r4872962 = r4872961 * r4872924;
double r4872963 = fma(r4872960, r4872960, r4872962);
double r4872964 = r4872959 / r4872963;
double r4872965 = r4872964 / r4872930;
double r4872966 = r4872965 / r4872936;
double r4872967 = r4872949 ? r4872945 : r4872966;
double r4872968 = r4872947 ? r4872937 : r4872967;
double r4872969 = r4872939 ? r4872945 : r4872968;
double r4872970 = r4872913 ? r4872937 : r4872969;
return r4872970;
}




Bits error versus a




Bits error versus x
| Original | 28.6 |
|---|---|
| Target | 0.2 |
| Herbie | 14.0 |
if x < -4.7697460024798494e+75 or -2.7735030981717545e-34 < x < -2.2530088269998953e-43Initial program 17.9
rmApplied flip3--17.9
Simplified17.9
Simplified17.9
rmApplied flip3--17.9
Simplified17.8
Simplified17.8
if -4.7697460024798494e+75 < x < -2.7735030981717545e-34 or -2.2530088269998953e-43 < x < 1.61596322380751e+101Initial program 33.5
Taylor expanded around 0 19.2
Simplified13.0
if 1.61596322380751e+101 < x Initial program 14.6
rmApplied flip3--14.6
Simplified14.5
Simplified14.5
rmApplied flip3--14.6
Simplified14.6
Simplified14.6
rmApplied flip3--14.6
Simplified14.6
Simplified14.6
Final simplification14.0
herbie shell --seed 2019169 +o rules:numerics
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))
(- (exp (* a x)) 1.0))