\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 r77511 = eps;
double r77512 = a;
double r77513 = b;
double r77514 = r77512 + r77513;
double r77515 = r77514 * r77511;
double r77516 = exp(r77515);
double r77517 = 1.0;
double r77518 = r77516 - r77517;
double r77519 = r77511 * r77518;
double r77520 = r77512 * r77511;
double r77521 = exp(r77520);
double r77522 = r77521 - r77517;
double r77523 = r77513 * r77511;
double r77524 = exp(r77523);
double r77525 = r77524 - r77517;
double r77526 = r77522 * r77525;
double r77527 = r77519 / r77526;
return r77527;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r77528 = 1.0;
double r77529 = b;
double r77530 = r77528 / r77529;
double r77531 = a;
double r77532 = r77528 / r77531;
double r77533 = r77530 + r77532;
return r77533;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.0 |
|---|---|
| Target | 15.4 |
| Herbie | 3.7 |
Initial program 60.0
Taylor expanded around 0 3.7
Final simplification3.7
herbie shell --seed 2020025
(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))))