\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}{a} + \frac{1}{b}double f(double a, double b, double eps) {
double r3216221 = eps;
double r3216222 = a;
double r3216223 = b;
double r3216224 = r3216222 + r3216223;
double r3216225 = r3216224 * r3216221;
double r3216226 = exp(r3216225);
double r3216227 = 1.0;
double r3216228 = r3216226 - r3216227;
double r3216229 = r3216221 * r3216228;
double r3216230 = r3216222 * r3216221;
double r3216231 = exp(r3216230);
double r3216232 = r3216231 - r3216227;
double r3216233 = r3216223 * r3216221;
double r3216234 = exp(r3216233);
double r3216235 = r3216234 - r3216227;
double r3216236 = r3216232 * r3216235;
double r3216237 = r3216229 / r3216236;
return r3216237;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r3216238 = 1.0;
double r3216239 = a;
double r3216240 = r3216238 / r3216239;
double r3216241 = b;
double r3216242 = r3216238 / r3216241;
double r3216243 = r3216240 + r3216242;
return r3216243;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.8 |
|---|---|
| Target | 14.2 |
| Herbie | 3.2 |
Initial program 58.8
Taylor expanded around 0 56.5
Simplified55.5
Taylor expanded around 0 3.2
Final simplification3.2
herbie shell --seed 2019152
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))