\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}{a} + \frac{1}{b}double f(double a, double b, double eps) {
double r5539617 = eps;
double r5539618 = a;
double r5539619 = b;
double r5539620 = r5539618 + r5539619;
double r5539621 = r5539620 * r5539617;
double r5539622 = exp(r5539621);
double r5539623 = 1.0;
double r5539624 = r5539622 - r5539623;
double r5539625 = r5539617 * r5539624;
double r5539626 = r5539618 * r5539617;
double r5539627 = exp(r5539626);
double r5539628 = r5539627 - r5539623;
double r5539629 = r5539619 * r5539617;
double r5539630 = exp(r5539629);
double r5539631 = r5539630 - r5539623;
double r5539632 = r5539628 * r5539631;
double r5539633 = r5539625 / r5539632;
return r5539633;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r5539634 = 1.0;
double r5539635 = a;
double r5539636 = r5539634 / r5539635;
double r5539637 = b;
double r5539638 = r5539634 / r5539637;
double r5539639 = r5539636 + r5539638;
return r5539639;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.4 |
|---|---|
| Target | 14.5 |
| Herbie | 3.6 |
Initial program 58.4
Simplified30.8
Taylor expanded around 0 3.6
Final simplification3.6
herbie shell --seed 2019134 +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))))