\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 r78406 = eps;
double r78407 = a;
double r78408 = b;
double r78409 = r78407 + r78408;
double r78410 = r78409 * r78406;
double r78411 = exp(r78410);
double r78412 = 1.0;
double r78413 = r78411 - r78412;
double r78414 = r78406 * r78413;
double r78415 = r78407 * r78406;
double r78416 = exp(r78415);
double r78417 = r78416 - r78412;
double r78418 = r78408 * r78406;
double r78419 = exp(r78418);
double r78420 = r78419 - r78412;
double r78421 = r78417 * r78420;
double r78422 = r78414 / r78421;
return r78422;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r78423 = 1.0;
double r78424 = b;
double r78425 = r78423 / r78424;
double r78426 = a;
double r78427 = r78423 / r78426;
double r78428 = r78425 + r78427;
return r78428;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.1 |
| Herbie | 3.3 |
Initial program 60.4
Taylor expanded around 0 58.2
rmApplied pow-prod-down57.7
Simplified57.7
Taylor expanded around 0 3.3
Final simplification3.3
herbie shell --seed 2020047
(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))))