\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 r100954 = eps;
double r100955 = a;
double r100956 = b;
double r100957 = r100955 + r100956;
double r100958 = r100957 * r100954;
double r100959 = exp(r100958);
double r100960 = 1.0;
double r100961 = r100959 - r100960;
double r100962 = r100954 * r100961;
double r100963 = r100955 * r100954;
double r100964 = exp(r100963);
double r100965 = r100964 - r100960;
double r100966 = r100956 * r100954;
double r100967 = exp(r100966);
double r100968 = r100967 - r100960;
double r100969 = r100965 * r100968;
double r100970 = r100962 / r100969;
return r100970;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r100971 = 1.0;
double r100972 = b;
double r100973 = r100971 / r100972;
double r100974 = a;
double r100975 = r100971 / r100974;
double r100976 = r100973 + r100975;
return r100976;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.8 |
| Herbie | 3.1 |
Initial program 60.6
Taylor expanded around 0 58.0
rmApplied pow-prod-down57.6
Simplified57.6
Taylor expanded around 0 3.1
Final simplification3.1
herbie shell --seed 2019352
(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))))