\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 r461 = eps;
double r462 = a;
double r463 = b;
double r464 = r462 + r463;
double r465 = r464 * r461;
double r466 = exp(r465);
double r467 = 1.0;
double r468 = r466 - r467;
double r469 = r461 * r468;
double r470 = r462 * r461;
double r471 = exp(r470);
double r472 = r471 - r467;
double r473 = r463 * r461;
double r474 = exp(r473);
double r475 = r474 - r467;
double r476 = r472 * r475;
double r477 = r469 / r476;
return r477;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r478 = 1.0;
double r479 = b;
double r480 = r478 / r479;
double r481 = a;
double r482 = r478 / r481;
double r483 = r480 + r482;
return r483;
}




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))))