\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 r95832 = eps;
double r95833 = a;
double r95834 = b;
double r95835 = r95833 + r95834;
double r95836 = r95835 * r95832;
double r95837 = exp(r95836);
double r95838 = 1.0;
double r95839 = r95837 - r95838;
double r95840 = r95832 * r95839;
double r95841 = r95833 * r95832;
double r95842 = exp(r95841);
double r95843 = r95842 - r95838;
double r95844 = r95834 * r95832;
double r95845 = exp(r95844);
double r95846 = r95845 - r95838;
double r95847 = r95843 * r95846;
double r95848 = r95840 / r95847;
return r95848;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r95849 = 1.0;
double r95850 = b;
double r95851 = r95849 / r95850;
double r95852 = a;
double r95853 = r95849 / r95852;
double r95854 = r95851 + r95853;
return r95854;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.2 |
|---|---|
| Target | 14.9 |
| Herbie | 3.5 |
Initial program 60.2
Taylor expanded around 0 58.2
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2019308
(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))))