\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 r88851 = eps;
double r88852 = a;
double r88853 = b;
double r88854 = r88852 + r88853;
double r88855 = r88854 * r88851;
double r88856 = exp(r88855);
double r88857 = 1.0;
double r88858 = r88856 - r88857;
double r88859 = r88851 * r88858;
double r88860 = r88852 * r88851;
double r88861 = exp(r88860);
double r88862 = r88861 - r88857;
double r88863 = r88853 * r88851;
double r88864 = exp(r88863);
double r88865 = r88864 - r88857;
double r88866 = r88862 * r88865;
double r88867 = r88859 / r88866;
return r88867;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r88868 = 1.0;
double r88869 = b;
double r88870 = r88868 / r88869;
double r88871 = a;
double r88872 = r88868 / r88871;
double r88873 = r88870 + r88872;
return r88873;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.8 |
|---|---|
| Target | 14.5 |
| Herbie | 2.9 |
Initial program 60.8
Taylor expanded around 0 58.1
rmApplied pow-prod-down57.8
Taylor expanded around 0 2.9
Final simplification2.9
herbie shell --seed 2019298
(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))))