\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 r122187 = eps;
double r122188 = a;
double r122189 = b;
double r122190 = r122188 + r122189;
double r122191 = r122190 * r122187;
double r122192 = exp(r122191);
double r122193 = 1.0;
double r122194 = r122192 - r122193;
double r122195 = r122187 * r122194;
double r122196 = r122188 * r122187;
double r122197 = exp(r122196);
double r122198 = r122197 - r122193;
double r122199 = r122189 * r122187;
double r122200 = exp(r122199);
double r122201 = r122200 - r122193;
double r122202 = r122198 * r122201;
double r122203 = r122195 / r122202;
return r122203;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r122204 = 1.0;
double r122205 = b;
double r122206 = r122204 / r122205;
double r122207 = a;
double r122208 = r122204 / r122207;
double r122209 = r122206 + r122208;
return r122209;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.2 |
|---|---|
| Target | 14.8 |
| Herbie | 3.5 |
Initial program 60.2
Taylor expanded around 0 58.2
Simplified58.2
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2019346 +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))))