\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}\;\varepsilon \le 5.3360736243582115 \cdot 10^{-31}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{e^{\left(a + b\right) \cdot \varepsilon} + \left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r83939 = eps;
double r83940 = a;
double r83941 = b;
double r83942 = r83940 + r83941;
double r83943 = r83942 * r83939;
double r83944 = exp(r83943);
double r83945 = 1.0;
double r83946 = r83944 - r83945;
double r83947 = r83939 * r83946;
double r83948 = r83940 * r83939;
double r83949 = exp(r83948);
double r83950 = r83949 - r83945;
double r83951 = r83941 * r83939;
double r83952 = exp(r83951);
double r83953 = r83952 - r83945;
double r83954 = r83950 * r83953;
double r83955 = r83947 / r83954;
return r83955;
}
double f(double a, double b, double eps) {
double r83956 = eps;
double r83957 = 5.3360736243582115e-31;
bool r83958 = r83956 <= r83957;
double r83959 = 1.0;
double r83960 = b;
double r83961 = r83959 / r83960;
double r83962 = a;
double r83963 = r83959 / r83962;
double r83964 = r83961 + r83963;
double r83965 = r83962 + r83960;
double r83966 = r83965 * r83956;
double r83967 = exp(r83966);
double r83968 = 1.0;
double r83969 = r83967 - r83968;
double r83970 = r83956 * r83969;
double r83971 = r83960 * r83956;
double r83972 = exp(r83971);
double r83973 = r83962 * r83956;
double r83974 = exp(r83973);
double r83975 = r83972 + r83974;
double r83976 = r83968 * r83975;
double r83977 = r83968 - r83976;
double r83978 = r83967 + r83977;
double r83979 = r83970 / r83978;
double r83980 = r83958 ? r83964 : r83979;
return r83980;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 14.6 |
| Herbie | 4.8 |
if eps < 5.3360736243582115e-31Initial program 60.8
Taylor expanded around 0 2.9
if 5.3360736243582115e-31 < eps Initial program 50.7
Taylor expanded around inf 55.1
Simplified50.7
Final simplification4.8
herbie shell --seed 2020046 +o rules:numerics
(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))))