\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 r3159723 = eps;
double r3159724 = a;
double r3159725 = b;
double r3159726 = r3159724 + r3159725;
double r3159727 = r3159726 * r3159723;
double r3159728 = exp(r3159727);
double r3159729 = 1.0;
double r3159730 = r3159728 - r3159729;
double r3159731 = r3159723 * r3159730;
double r3159732 = r3159724 * r3159723;
double r3159733 = exp(r3159732);
double r3159734 = r3159733 - r3159729;
double r3159735 = r3159725 * r3159723;
double r3159736 = exp(r3159735);
double r3159737 = r3159736 - r3159729;
double r3159738 = r3159734 * r3159737;
double r3159739 = r3159731 / r3159738;
return r3159739;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r3159740 = 1.0;
double r3159741 = b;
double r3159742 = r3159740 / r3159741;
double r3159743 = a;
double r3159744 = r3159740 / r3159743;
double r3159745 = r3159742 + r3159744;
return r3159745;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.5 |
|---|---|
| Target | 14.4 |
| Herbie | 3.5 |
Initial program 58.5
Simplified28.0
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2019146 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))