\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 r9474248 = eps;
double r9474249 = a;
double r9474250 = b;
double r9474251 = r9474249 + r9474250;
double r9474252 = r9474251 * r9474248;
double r9474253 = exp(r9474252);
double r9474254 = 1.0;
double r9474255 = r9474253 - r9474254;
double r9474256 = r9474248 * r9474255;
double r9474257 = r9474249 * r9474248;
double r9474258 = exp(r9474257);
double r9474259 = r9474258 - r9474254;
double r9474260 = r9474250 * r9474248;
double r9474261 = exp(r9474260);
double r9474262 = r9474261 - r9474254;
double r9474263 = r9474259 * r9474262;
double r9474264 = r9474256 / r9474263;
return r9474264;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r9474265 = 1.0;
double r9474266 = a;
double r9474267 = r9474265 / r9474266;
double r9474268 = b;
double r9474269 = r9474265 / r9474268;
double r9474270 = r9474267 + r9474269;
return r9474270;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.5 |
| Herbie | 3.4 |
Initial program 60.3
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019173 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:pre (and (< -1.0 eps) (< eps 1.0))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1.0)) (* (- (exp (* a eps)) 1.0) (- (exp (* b eps)) 1.0))))