\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 r2190438 = eps;
double r2190439 = a;
double r2190440 = b;
double r2190441 = r2190439 + r2190440;
double r2190442 = r2190441 * r2190438;
double r2190443 = exp(r2190442);
double r2190444 = 1.0;
double r2190445 = r2190443 - r2190444;
double r2190446 = r2190438 * r2190445;
double r2190447 = r2190439 * r2190438;
double r2190448 = exp(r2190447);
double r2190449 = r2190448 - r2190444;
double r2190450 = r2190440 * r2190438;
double r2190451 = exp(r2190450);
double r2190452 = r2190451 - r2190444;
double r2190453 = r2190449 * r2190452;
double r2190454 = r2190446 / r2190453;
return r2190454;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r2190455 = 1.0;
double r2190456 = a;
double r2190457 = r2190455 / r2190456;
double r2190458 = b;
double r2190459 = r2190455 / r2190458;
double r2190460 = r2190457 + r2190459;
return r2190460;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.9 |
|---|---|
| Target | 14.2 |
| Herbie | 3.1 |
Initial program 58.9
Taylor expanded around 0 56.1
Simplified56.1
Taylor expanded around 0 3.1
Final simplification3.1
herbie shell --seed 2019153
(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))))