\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}\;b \le -2.55915272720628289 \cdot 10^{73}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(a \cdot \varepsilon + {\varepsilon}^{\left(\frac{2}{2}\right)} \cdot \left(\varepsilon \cdot \left(\frac{1}{2} \cdot {a}^{2} + \frac{1}{6} \cdot \left(a \cdot \left(\left(a \cdot a\right) \cdot \varepsilon\right)\right)\right)\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\mathbf{elif}\;b \le 2.19207211303363165 \cdot 10^{74}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left({\varepsilon}^{3} \cdot {b}^{3}\right) + b \cdot \left(\varepsilon + \left(\frac{1}{2} \cdot {\varepsilon}^{2}\right) \cdot b\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(a \cdot \varepsilon + {\varepsilon}^{\left(\frac{2}{2}\right)} \cdot \left(\varepsilon \cdot \left(\frac{1}{2} \cdot {a}^{2} + \frac{1}{6} \cdot \left(a \cdot \left(\left(a \cdot a\right) \cdot \varepsilon\right)\right)\right)\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r88933 = eps;
double r88934 = a;
double r88935 = b;
double r88936 = r88934 + r88935;
double r88937 = r88936 * r88933;
double r88938 = exp(r88937);
double r88939 = 1.0;
double r88940 = r88938 - r88939;
double r88941 = r88933 * r88940;
double r88942 = r88934 * r88933;
double r88943 = exp(r88942);
double r88944 = r88943 - r88939;
double r88945 = r88935 * r88933;
double r88946 = exp(r88945);
double r88947 = r88946 - r88939;
double r88948 = r88944 * r88947;
double r88949 = r88941 / r88948;
return r88949;
}
double f(double a, double b, double eps) {
double r88950 = b;
double r88951 = -2.559152727206283e+73;
bool r88952 = r88950 <= r88951;
double r88953 = eps;
double r88954 = a;
double r88955 = r88954 + r88950;
double r88956 = r88955 * r88953;
double r88957 = exp(r88956);
double r88958 = 1.0;
double r88959 = r88957 - r88958;
double r88960 = r88953 * r88959;
double r88961 = r88954 * r88953;
double r88962 = 2.0;
double r88963 = r88962 / r88962;
double r88964 = pow(r88953, r88963);
double r88965 = 0.5;
double r88966 = pow(r88954, r88962);
double r88967 = r88965 * r88966;
double r88968 = 0.16666666666666666;
double r88969 = r88954 * r88954;
double r88970 = r88969 * r88953;
double r88971 = r88954 * r88970;
double r88972 = r88968 * r88971;
double r88973 = r88967 + r88972;
double r88974 = r88953 * r88973;
double r88975 = r88964 * r88974;
double r88976 = r88961 + r88975;
double r88977 = r88950 * r88953;
double r88978 = exp(r88977);
double r88979 = r88978 - r88958;
double r88980 = r88976 * r88979;
double r88981 = r88960 / r88980;
double r88982 = 2.1920721130336317e+74;
bool r88983 = r88950 <= r88982;
double r88984 = exp(r88961);
double r88985 = r88984 - r88958;
double r88986 = 3.0;
double r88987 = pow(r88953, r88986);
double r88988 = pow(r88950, r88986);
double r88989 = r88987 * r88988;
double r88990 = r88968 * r88989;
double r88991 = pow(r88953, r88962);
double r88992 = r88965 * r88991;
double r88993 = r88992 * r88950;
double r88994 = r88953 + r88993;
double r88995 = r88950 * r88994;
double r88996 = r88990 + r88995;
double r88997 = r88985 * r88996;
double r88998 = r88960 / r88997;
double r88999 = pow(r88959, r88986);
double r89000 = cbrt(r88999);
double r89001 = r88953 * r89000;
double r89002 = r89001 / r88980;
double r89003 = r88983 ? r88998 : r89002;
double r89004 = r88952 ? r88981 : r89003;
return r89004;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.8 |
| Herbie | 53.1 |
if b < -2.559152727206283e+73Initial program 54.5
Taylor expanded around 0 46.6
Simplified46.4
rmApplied sqr-pow46.4
Applied associate-*l*46.1
Simplified46.1
rmApplied cube-mult46.1
Applied associate-*l*45.2
if -2.559152727206283e+73 < b < 2.1920721130336317e+74Initial program 63.4
Taylor expanded around 0 56.3
Simplified56.3
if 2.1920721130336317e+74 < b Initial program 53.7
Taylor expanded around 0 48.1
Simplified47.8
rmApplied sqr-pow47.8
Applied associate-*l*47.5
Simplified47.5
rmApplied cube-mult47.5
Applied associate-*l*46.3
rmApplied add-cbrt-cube46.3
Simplified46.3
Final simplification53.1
herbie shell --seed 2020045
(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))))