\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\begin{array}{l}
\mathbf{if}\;a \le -1.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left(\left(\left({\varepsilon}^{3} \cdot b\right) \cdot b\right) \cdot b\right) + \left(\frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot {b}^{2}\right) + \varepsilon \cdot b\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot \left({a}^{3} \cdot {\varepsilon}^{3}\right) + \left(\frac{1}{2} \cdot \left({a}^{2} \cdot {\varepsilon}^{2}\right) + a \cdot \varepsilon\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r94895 = eps;
double r94896 = a;
double r94897 = b;
double r94898 = r94896 + r94897;
double r94899 = r94898 * r94895;
double r94900 = exp(r94899);
double r94901 = 1.0;
double r94902 = r94900 - r94901;
double r94903 = r94895 * r94902;
double r94904 = r94896 * r94895;
double r94905 = exp(r94904);
double r94906 = r94905 - r94901;
double r94907 = r94897 * r94895;
double r94908 = exp(r94907);
double r94909 = r94908 - r94901;
double r94910 = r94906 * r94909;
double r94911 = r94903 / r94910;
return r94911;
}
double f(double a, double b, double eps) {
double r94912 = a;
double r94913 = -1.9693375139914443e+72;
bool r94914 = r94912 <= r94913;
double r94915 = 9.716140837926457e+126;
bool r94916 = r94912 <= r94915;
double r94917 = !r94916;
bool r94918 = r94914 || r94917;
double r94919 = eps;
double r94920 = b;
double r94921 = r94912 + r94920;
double r94922 = r94921 * r94919;
double r94923 = exp(r94922);
double r94924 = 1.0;
double r94925 = r94923 - r94924;
double r94926 = 3.0;
double r94927 = pow(r94925, r94926);
double r94928 = cbrt(r94927);
double r94929 = r94919 * r94928;
double r94930 = r94912 * r94919;
double r94931 = exp(r94930);
double r94932 = r94931 - r94924;
double r94933 = 0.16666666666666666;
double r94934 = pow(r94919, r94926);
double r94935 = r94934 * r94920;
double r94936 = r94935 * r94920;
double r94937 = r94936 * r94920;
double r94938 = r94933 * r94937;
double r94939 = 0.5;
double r94940 = 2.0;
double r94941 = pow(r94919, r94940);
double r94942 = pow(r94920, r94940);
double r94943 = r94941 * r94942;
double r94944 = r94939 * r94943;
double r94945 = r94919 * r94920;
double r94946 = r94944 + r94945;
double r94947 = r94938 + r94946;
double r94948 = r94932 * r94947;
double r94949 = r94929 / r94948;
double r94950 = r94919 * r94925;
double r94951 = pow(r94912, r94926);
double r94952 = r94951 * r94934;
double r94953 = r94933 * r94952;
double r94954 = pow(r94912, r94940);
double r94955 = r94954 * r94941;
double r94956 = r94939 * r94955;
double r94957 = r94956 + r94930;
double r94958 = r94953 + r94957;
double r94959 = r94920 * r94919;
double r94960 = exp(r94959);
double r94961 = r94960 - r94924;
double r94962 = r94958 * r94961;
double r94963 = r94950 / r94962;
double r94964 = r94918 ? r94949 : r94963;
return r94964;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.2 |
|---|---|
| Target | 14.9 |
| Herbie | 53.5 |
if a < -1.9693375139914443e+72 or 9.716140837926457e+126 < a Initial program 52.9
Taylor expanded around 0 46.9
rmApplied unpow346.9
Applied associate-*r*46.0
Simplified45.3
rmApplied add-cbrt-cube45.4
Simplified45.4
if -1.9693375139914443e+72 < a < 9.716140837926457e+126Initial program 63.0
Taylor expanded around 0 56.5
Final simplification53.5
herbie shell --seed 2020001
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:precision binary64
:pre (and (< -1 eps) (< eps 1))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))))