\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 r87314 = eps;
double r87315 = a;
double r87316 = b;
double r87317 = r87315 + r87316;
double r87318 = r87317 * r87314;
double r87319 = exp(r87318);
double r87320 = 1.0;
double r87321 = r87319 - r87320;
double r87322 = r87314 * r87321;
double r87323 = r87315 * r87314;
double r87324 = exp(r87323);
double r87325 = r87324 - r87320;
double r87326 = r87316 * r87314;
double r87327 = exp(r87326);
double r87328 = r87327 - r87320;
double r87329 = r87325 * r87328;
double r87330 = r87322 / r87329;
return r87330;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r87331 = 1.0;
double r87332 = b;
double r87333 = r87331 / r87332;
double r87334 = a;
double r87335 = r87331 / r87334;
double r87336 = r87333 + r87335;
return r87336;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.2 |
| Herbie | 3.4 |
Initial program 60.3
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019323 +o rules:numerics
(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))))