\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 r7984983 = eps;
double r7984984 = a;
double r7984985 = b;
double r7984986 = r7984984 + r7984985;
double r7984987 = r7984986 * r7984983;
double r7984988 = exp(r7984987);
double r7984989 = 1.0;
double r7984990 = r7984988 - r7984989;
double r7984991 = r7984983 * r7984990;
double r7984992 = r7984984 * r7984983;
double r7984993 = exp(r7984992);
double r7984994 = r7984993 - r7984989;
double r7984995 = r7984985 * r7984983;
double r7984996 = exp(r7984995);
double r7984997 = r7984996 - r7984989;
double r7984998 = r7984994 * r7984997;
double r7984999 = r7984991 / r7984998;
return r7984999;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r7985000 = 1.0;
double r7985001 = a;
double r7985002 = r7985000 / r7985001;
double r7985003 = b;
double r7985004 = r7985000 / r7985003;
double r7985005 = r7985002 + r7985004;
return r7985005;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 14.3 |
| Herbie | 3.4 |
Initial program 58.6
Simplified34.0
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019124 +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))))