\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 r102624 = eps;
double r102625 = a;
double r102626 = b;
double r102627 = r102625 + r102626;
double r102628 = r102627 * r102624;
double r102629 = exp(r102628);
double r102630 = 1.0;
double r102631 = r102629 - r102630;
double r102632 = r102624 * r102631;
double r102633 = r102625 * r102624;
double r102634 = exp(r102633);
double r102635 = r102634 - r102630;
double r102636 = r102626 * r102624;
double r102637 = exp(r102636);
double r102638 = r102637 - r102630;
double r102639 = r102635 * r102638;
double r102640 = r102632 / r102639;
return r102640;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r102641 = 1.0;
double r102642 = b;
double r102643 = r102641 / r102642;
double r102644 = a;
double r102645 = r102641 / r102644;
double r102646 = r102643 + r102645;
return r102646;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.1 |
|---|---|
| Target | 15.3 |
| Herbie | 3.6 |
Initial program 60.1
Taylor expanded around 0 57.9
Simplified57.9
Taylor expanded around 0 3.6
Simplified3.6
Final simplification3.6
herbie shell --seed 2019196
(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))))