\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)}\frac{1}{a} + \frac{1}{b}double f(double a, double b, double eps) {
double r779974 = eps;
double r779975 = a;
double r779976 = b;
double r779977 = r779975 + r779976;
double r779978 = r779977 * r779974;
double r779979 = exp(r779978);
double r779980 = 1.0;
double r779981 = r779979 - r779980;
double r779982 = r779974 * r779981;
double r779983 = r779975 * r779974;
double r779984 = exp(r779983);
double r779985 = r779984 - r779980;
double r779986 = r779976 * r779974;
double r779987 = exp(r779986);
double r779988 = r779987 - r779980;
double r779989 = r779985 * r779988;
double r779990 = r779982 / r779989;
return r779990;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r779991 = 1.0;
double r779992 = a;
double r779993 = r779991 / r779992;
double r779994 = b;
double r779995 = r779991 / r779994;
double r779996 = r779993 + r779995;
return r779996;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.8 |
|---|---|
| Target | 14.1 |
| Herbie | 3.2 |
Initial program 58.8
Simplified39.5
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019154 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))