\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 r80206 = eps;
double r80207 = a;
double r80208 = b;
double r80209 = r80207 + r80208;
double r80210 = r80209 * r80206;
double r80211 = exp(r80210);
double r80212 = 1.0;
double r80213 = r80211 - r80212;
double r80214 = r80206 * r80213;
double r80215 = r80207 * r80206;
double r80216 = exp(r80215);
double r80217 = r80216 - r80212;
double r80218 = r80208 * r80206;
double r80219 = exp(r80218);
double r80220 = r80219 - r80212;
double r80221 = r80217 * r80220;
double r80222 = r80214 / r80221;
return r80222;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r80223 = 1.0;
double r80224 = b;
double r80225 = r80223 / r80224;
double r80226 = a;
double r80227 = r80223 / r80226;
double r80228 = r80225 + r80227;
return r80228;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.1 |
| Herbie | 3.2 |
Initial program 60.4
Taylor expanded around 0 58.2
Simplified58.2
Taylor expanded around 0 3.2
Simplified3.2
Final simplification3.2
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:pre (and (< -1.0 eps) (< eps 1.0))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1.0)) (* (- (exp (* a eps)) 1.0) (- (exp (* b eps)) 1.0))))