\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 r3155248 = eps;
double r3155249 = a;
double r3155250 = b;
double r3155251 = r3155249 + r3155250;
double r3155252 = r3155251 * r3155248;
double r3155253 = exp(r3155252);
double r3155254 = 1.0;
double r3155255 = r3155253 - r3155254;
double r3155256 = r3155248 * r3155255;
double r3155257 = r3155249 * r3155248;
double r3155258 = exp(r3155257);
double r3155259 = r3155258 - r3155254;
double r3155260 = r3155250 * r3155248;
double r3155261 = exp(r3155260);
double r3155262 = r3155261 - r3155254;
double r3155263 = r3155259 * r3155262;
double r3155264 = r3155256 / r3155263;
return r3155264;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r3155265 = 1.0;
double r3155266 = a;
double r3155267 = r3155265 / r3155266;
double r3155268 = b;
double r3155269 = r3155265 / r3155268;
double r3155270 = r3155267 + r3155269;
return r3155270;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 14.4 |
| Herbie | 3.4 |
Initial program 58.6
Taylor expanded around 0 56.4
Simplified55.4
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019139
(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))))