\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 r67004 = eps;
double r67005 = a;
double r67006 = b;
double r67007 = r67005 + r67006;
double r67008 = r67007 * r67004;
double r67009 = exp(r67008);
double r67010 = 1.0;
double r67011 = r67009 - r67010;
double r67012 = r67004 * r67011;
double r67013 = r67005 * r67004;
double r67014 = exp(r67013);
double r67015 = r67014 - r67010;
double r67016 = r67006 * r67004;
double r67017 = exp(r67016);
double r67018 = r67017 - r67010;
double r67019 = r67015 * r67018;
double r67020 = r67012 / r67019;
return r67020;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r67021 = 1.0;
double r67022 = b;
double r67023 = r67021 / r67022;
double r67024 = a;
double r67025 = r67021 / r67024;
double r67026 = r67023 + r67025;
return r67026;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 14.8 |
| Herbie | 3.2 |
Initial program 60.4
Taylor expanded around 0 58.1
Simplified58.0
rmApplied pow-prod-down57.3
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019325
(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))))