\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}{b} + \frac{1}{a}double f(double a, double b, double eps) {
double r108987 = eps;
double r108988 = a;
double r108989 = b;
double r108990 = r108988 + r108989;
double r108991 = r108990 * r108987;
double r108992 = exp(r108991);
double r108993 = 1.0;
double r108994 = r108992 - r108993;
double r108995 = r108987 * r108994;
double r108996 = r108988 * r108987;
double r108997 = exp(r108996);
double r108998 = r108997 - r108993;
double r108999 = r108989 * r108987;
double r109000 = exp(r108999);
double r109001 = r109000 - r108993;
double r109002 = r108998 * r109001;
double r109003 = r108995 / r109002;
return r109003;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r109004 = 1.0;
double r109005 = b;
double r109006 = r109004 / r109005;
double r109007 = a;
double r109008 = r109004 / r109007;
double r109009 = r109006 + r109008;
return r109009;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 14.8 |
| Herbie | 3.3 |
Initial program 60.4
Taylor expanded around 0 3.3
Final simplification3.3
herbie shell --seed 2019304
(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))))