\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 r80180 = eps;
double r80181 = a;
double r80182 = b;
double r80183 = r80181 + r80182;
double r80184 = r80183 * r80180;
double r80185 = exp(r80184);
double r80186 = 1.0;
double r80187 = r80185 - r80186;
double r80188 = r80180 * r80187;
double r80189 = r80181 * r80180;
double r80190 = exp(r80189);
double r80191 = r80190 - r80186;
double r80192 = r80182 * r80180;
double r80193 = exp(r80192);
double r80194 = r80193 - r80186;
double r80195 = r80191 * r80194;
double r80196 = r80188 / r80195;
return r80196;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r80197 = 1.0;
double r80198 = b;
double r80199 = r80197 / r80198;
double r80200 = a;
double r80201 = r80197 / r80200;
double r80202 = r80199 + r80201;
return r80202;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.7 |
| Herbie | 3.0 |
Initial program 60.6
Taylor expanded around 0 57.7
Simplified57.7
rmApplied pow-prod-down57.4
Simplified57.4
Taylor expanded around 0 3.0
Final simplification3.0
herbie shell --seed 2019356 +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))))