\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 r102478 = eps;
double r102479 = a;
double r102480 = b;
double r102481 = r102479 + r102480;
double r102482 = r102481 * r102478;
double r102483 = exp(r102482);
double r102484 = 1.0;
double r102485 = r102483 - r102484;
double r102486 = r102478 * r102485;
double r102487 = r102479 * r102478;
double r102488 = exp(r102487);
double r102489 = r102488 - r102484;
double r102490 = r102480 * r102478;
double r102491 = exp(r102490);
double r102492 = r102491 - r102484;
double r102493 = r102489 * r102492;
double r102494 = r102486 / r102493;
return r102494;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r102495 = 1.0;
double r102496 = b;
double r102497 = r102495 / r102496;
double r102498 = a;
double r102499 = r102495 / r102498;
double r102500 = r102497 + r102499;
return r102500;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.1 |
|---|---|
| Target | 14.8 |
| Herbie | 3.6 |
Initial program 60.1
Taylor expanded around 0 58.0
Simplified58.0
Taylor expanded around 0 3.6
Final simplification3.6
herbie shell --seed 2020033 +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))))