\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 r3850986 = eps;
double r3850987 = a;
double r3850988 = b;
double r3850989 = r3850987 + r3850988;
double r3850990 = r3850989 * r3850986;
double r3850991 = exp(r3850990);
double r3850992 = 1.0;
double r3850993 = r3850991 - r3850992;
double r3850994 = r3850986 * r3850993;
double r3850995 = r3850987 * r3850986;
double r3850996 = exp(r3850995);
double r3850997 = r3850996 - r3850992;
double r3850998 = r3850988 * r3850986;
double r3850999 = exp(r3850998);
double r3851000 = r3850999 - r3850992;
double r3851001 = r3850997 * r3851000;
double r3851002 = r3850994 / r3851001;
return r3851002;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r3851003 = 1.0;
double r3851004 = a;
double r3851005 = r3851003 / r3851004;
double r3851006 = b;
double r3851007 = r3851003 / r3851006;
double r3851008 = r3851005 + r3851007;
return r3851008;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.8 |
|---|---|
| Target | 13.9 |
| Herbie | 3.2 |
Initial program 58.8
Taylor expanded around 0 56.5
Simplified55.4
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019158
(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))))