\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 r102611 = eps;
double r102612 = a;
double r102613 = b;
double r102614 = r102612 + r102613;
double r102615 = r102614 * r102611;
double r102616 = exp(r102615);
double r102617 = 1.0;
double r102618 = r102616 - r102617;
double r102619 = r102611 * r102618;
double r102620 = r102612 * r102611;
double r102621 = exp(r102620);
double r102622 = r102621 - r102617;
double r102623 = r102613 * r102611;
double r102624 = exp(r102623);
double r102625 = r102624 - r102617;
double r102626 = r102622 * r102625;
double r102627 = r102619 / r102626;
return r102627;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r102628 = 1.0;
double r102629 = b;
double r102630 = r102628 / r102629;
double r102631 = a;
double r102632 = r102628 / r102631;
double r102633 = r102630 + r102632;
return r102633;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.8 |
| Herbie | 3.1 |
Initial program 60.6
Taylor expanded around 0 58.4
Simplified58.4
rmApplied pow-prod-down57.9
Taylor expanded around 0 3.1
Final simplification3.1
herbie shell --seed 2020045 +o rules:numerics
(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))))