\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 r110302 = eps;
double r110303 = a;
double r110304 = b;
double r110305 = r110303 + r110304;
double r110306 = r110305 * r110302;
double r110307 = exp(r110306);
double r110308 = 1.0;
double r110309 = r110307 - r110308;
double r110310 = r110302 * r110309;
double r110311 = r110303 * r110302;
double r110312 = exp(r110311);
double r110313 = r110312 - r110308;
double r110314 = r110304 * r110302;
double r110315 = exp(r110314);
double r110316 = r110315 - r110308;
double r110317 = r110313 * r110316;
double r110318 = r110310 / r110317;
return r110318;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r110319 = 1.0;
double r110320 = b;
double r110321 = r110319 / r110320;
double r110322 = a;
double r110323 = r110319 / r110322;
double r110324 = r110321 + r110323;
return r110324;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.0 |
| Herbie | 3.3 |
Initial program 60.4
Taylor expanded around 0 58.0
Taylor expanded around 0 3.3
Final simplification3.3
herbie shell --seed 2020089
(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))))