\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 r109314 = eps;
double r109315 = a;
double r109316 = b;
double r109317 = r109315 + r109316;
double r109318 = r109317 * r109314;
double r109319 = exp(r109318);
double r109320 = 1.0;
double r109321 = r109319 - r109320;
double r109322 = r109314 * r109321;
double r109323 = r109315 * r109314;
double r109324 = exp(r109323);
double r109325 = r109324 - r109320;
double r109326 = r109316 * r109314;
double r109327 = exp(r109326);
double r109328 = r109327 - r109320;
double r109329 = r109325 * r109328;
double r109330 = r109322 / r109329;
return r109330;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r109331 = 1.0;
double r109332 = b;
double r109333 = r109331 / r109332;
double r109334 = a;
double r109335 = r109331 / r109334;
double r109336 = r109333 + r109335;
return r109336;
}




Bits error versus a




Bits error versus b




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