\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 r99092 = eps;
double r99093 = a;
double r99094 = b;
double r99095 = r99093 + r99094;
double r99096 = r99095 * r99092;
double r99097 = exp(r99096);
double r99098 = 1.0;
double r99099 = r99097 - r99098;
double r99100 = r99092 * r99099;
double r99101 = r99093 * r99092;
double r99102 = exp(r99101);
double r99103 = r99102 - r99098;
double r99104 = r99094 * r99092;
double r99105 = exp(r99104);
double r99106 = r99105 - r99098;
double r99107 = r99103 * r99106;
double r99108 = r99100 / r99107;
return r99108;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r99109 = 1.0;
double r99110 = b;
double r99111 = r99109 / r99110;
double r99112 = a;
double r99113 = r99109 / r99112;
double r99114 = r99111 + r99113;
return r99114;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.0 |
| Herbie | 3.3 |
Initial program 60.4
Taylor expanded around 0 58.0
rmApplied pow-prod-down57.5
Simplified57.5
Taylor expanded around 0 3.3
Final simplification3.3
herbie shell --seed 2019212
(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))))