\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 r4065730 = eps;
double r4065731 = a;
double r4065732 = b;
double r4065733 = r4065731 + r4065732;
double r4065734 = r4065733 * r4065730;
double r4065735 = exp(r4065734);
double r4065736 = 1.0;
double r4065737 = r4065735 - r4065736;
double r4065738 = r4065730 * r4065737;
double r4065739 = r4065731 * r4065730;
double r4065740 = exp(r4065739);
double r4065741 = r4065740 - r4065736;
double r4065742 = r4065732 * r4065730;
double r4065743 = exp(r4065742);
double r4065744 = r4065743 - r4065736;
double r4065745 = r4065741 * r4065744;
double r4065746 = r4065738 / r4065745;
return r4065746;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r4065747 = 1.0;
double r4065748 = b;
double r4065749 = r4065747 / r4065748;
double r4065750 = a;
double r4065751 = r4065747 / r4065750;
double r4065752 = r4065749 + r4065751;
return r4065752;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.4 |
|---|---|
| Target | 14.4 |
| Herbie | 3.5 |
Initial program 58.4
Simplified27.2
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2019142 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))