\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 r85833 = eps;
double r85834 = a;
double r85835 = b;
double r85836 = r85834 + r85835;
double r85837 = r85836 * r85833;
double r85838 = exp(r85837);
double r85839 = 1.0;
double r85840 = r85838 - r85839;
double r85841 = r85833 * r85840;
double r85842 = r85834 * r85833;
double r85843 = exp(r85842);
double r85844 = r85843 - r85839;
double r85845 = r85835 * r85833;
double r85846 = exp(r85845);
double r85847 = r85846 - r85839;
double r85848 = r85844 * r85847;
double r85849 = r85841 / r85848;
return r85849;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r85850 = 1.0;
double r85851 = b;
double r85852 = r85850 / r85851;
double r85853 = a;
double r85854 = r85850 / r85853;
double r85855 = r85852 + r85854;
return r85855;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.5 |
|---|---|
| Target | 15.1 |
| Herbie | 3.2 |
Initial program 60.5
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019322
(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))))