\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 r214255 = eps;
double r214256 = a;
double r214257 = b;
double r214258 = r214256 + r214257;
double r214259 = r214258 * r214255;
double r214260 = exp(r214259);
double r214261 = 1.0;
double r214262 = r214260 - r214261;
double r214263 = r214255 * r214262;
double r214264 = r214256 * r214255;
double r214265 = exp(r214264);
double r214266 = r214265 - r214261;
double r214267 = r214257 * r214255;
double r214268 = exp(r214267);
double r214269 = r214268 - r214261;
double r214270 = r214266 * r214269;
double r214271 = r214263 / r214270;
return r214271;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r214272 = 1.0;
double r214273 = b;
double r214274 = r214272 / r214273;
double r214275 = a;
double r214276 = r214272 / r214275;
double r214277 = r214274 + r214276;
return r214277;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.5 |
|---|---|
| Target | 15.1 |
| Herbie | 3.2 |
Initial program 60.5
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019322
(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))))