\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 r113399 = eps;
double r113400 = a;
double r113401 = b;
double r113402 = r113400 + r113401;
double r113403 = r113402 * r113399;
double r113404 = exp(r113403);
double r113405 = 1.0;
double r113406 = r113404 - r113405;
double r113407 = r113399 * r113406;
double r113408 = r113400 * r113399;
double r113409 = exp(r113408);
double r113410 = r113409 - r113405;
double r113411 = r113401 * r113399;
double r113412 = exp(r113411);
double r113413 = r113412 - r113405;
double r113414 = r113410 * r113413;
double r113415 = r113407 / r113414;
return r113415;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r113416 = 1.0;
double r113417 = b;
double r113418 = r113416 / r113417;
double r113419 = a;
double r113420 = r113416 / r113419;
double r113421 = r113418 + r113420;
return r113421;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 14.7 |
| Herbie | 3.4 |
Initial program 60.3
Taylor expanded around 0 57.8
Simplified57.8
rmApplied pow-prod-down57.3
Simplified57.3
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2020081 +o rules:numerics
(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))))