\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 r96650 = eps;
double r96651 = a;
double r96652 = b;
double r96653 = r96651 + r96652;
double r96654 = r96653 * r96650;
double r96655 = exp(r96654);
double r96656 = 1.0;
double r96657 = r96655 - r96656;
double r96658 = r96650 * r96657;
double r96659 = r96651 * r96650;
double r96660 = exp(r96659);
double r96661 = r96660 - r96656;
double r96662 = r96652 * r96650;
double r96663 = exp(r96662);
double r96664 = r96663 - r96656;
double r96665 = r96661 * r96664;
double r96666 = r96658 / r96665;
return r96666;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r96667 = 1.0;
double r96668 = b;
double r96669 = r96667 / r96668;
double r96670 = a;
double r96671 = r96667 / r96670;
double r96672 = r96669 + r96671;
return r96672;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.7 |
| Herbie | 3.2 |
Initial program 60.6
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2020100 +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))))