\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 r419 = eps;
double r420 = a;
double r421 = b;
double r422 = r420 + r421;
double r423 = r422 * r419;
double r424 = exp(r423);
double r425 = 1.0;
double r426 = r424 - r425;
double r427 = r419 * r426;
double r428 = r420 * r419;
double r429 = exp(r428);
double r430 = r429 - r425;
double r431 = r421 * r419;
double r432 = exp(r431);
double r433 = r432 - r425;
double r434 = r430 * r433;
double r435 = r427 / r434;
return r435;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r436 = 1.0;
double r437 = b;
double r438 = r436 / r437;
double r439 = a;
double r440 = r436 / r439;
double r441 = r438 + r440;
return r441;
}




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