\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 r88217 = eps;
double r88218 = a;
double r88219 = b;
double r88220 = r88218 + r88219;
double r88221 = r88220 * r88217;
double r88222 = exp(r88221);
double r88223 = 1.0;
double r88224 = r88222 - r88223;
double r88225 = r88217 * r88224;
double r88226 = r88218 * r88217;
double r88227 = exp(r88226);
double r88228 = r88227 - r88223;
double r88229 = r88219 * r88217;
double r88230 = exp(r88229);
double r88231 = r88230 - r88223;
double r88232 = r88228 * r88231;
double r88233 = r88225 / r88232;
return r88233;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r88234 = 1.0;
double r88235 = b;
double r88236 = r88234 / r88235;
double r88237 = a;
double r88238 = r88234 / r88237;
double r88239 = r88236 + r88238;
return r88239;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 14.7 |
| Herbie | 3.4 |
Initial program 60.3
Taylor expanded around 0 57.8
rmApplied pow-prod-down57.3
Simplified57.3
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2020081
(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))))