\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 r74818 = eps;
double r74819 = a;
double r74820 = b;
double r74821 = r74819 + r74820;
double r74822 = r74821 * r74818;
double r74823 = exp(r74822);
double r74824 = 1.0;
double r74825 = r74823 - r74824;
double r74826 = r74818 * r74825;
double r74827 = r74819 * r74818;
double r74828 = exp(r74827);
double r74829 = r74828 - r74824;
double r74830 = r74820 * r74818;
double r74831 = exp(r74830);
double r74832 = r74831 - r74824;
double r74833 = r74829 * r74832;
double r74834 = r74826 / r74833;
return r74834;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r74835 = 1.0;
double r74836 = b;
double r74837 = r74835 / r74836;
double r74838 = a;
double r74839 = r74835 / r74838;
double r74840 = r74837 + r74839;
return r74840;
}




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 +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))))