\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}{a} + \frac{1}{b}double f(double a, double b, double eps) {
double r4390281 = eps;
double r4390282 = a;
double r4390283 = b;
double r4390284 = r4390282 + r4390283;
double r4390285 = r4390284 * r4390281;
double r4390286 = exp(r4390285);
double r4390287 = 1.0;
double r4390288 = r4390286 - r4390287;
double r4390289 = r4390281 * r4390288;
double r4390290 = r4390282 * r4390281;
double r4390291 = exp(r4390290);
double r4390292 = r4390291 - r4390287;
double r4390293 = r4390283 * r4390281;
double r4390294 = exp(r4390293);
double r4390295 = r4390294 - r4390287;
double r4390296 = r4390292 * r4390295;
double r4390297 = r4390289 / r4390296;
return r4390297;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r4390298 = 1.0;
double r4390299 = a;
double r4390300 = r4390298 / r4390299;
double r4390301 = b;
double r4390302 = r4390298 / r4390301;
double r4390303 = r4390300 + r4390302;
return r4390303;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 13.9 |
| Herbie | 3.4 |
Initial program 58.6
Taylor expanded around 0 56.1
Simplified55.6
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019165
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))