\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 r160555 = eps;
double r160556 = a;
double r160557 = b;
double r160558 = r160556 + r160557;
double r160559 = r160558 * r160555;
double r160560 = exp(r160559);
double r160561 = 1.0;
double r160562 = r160560 - r160561;
double r160563 = r160555 * r160562;
double r160564 = r160556 * r160555;
double r160565 = exp(r160564);
double r160566 = r160565 - r160561;
double r160567 = r160557 * r160555;
double r160568 = exp(r160567);
double r160569 = r160568 - r160561;
double r160570 = r160566 * r160569;
double r160571 = r160563 / r160570;
return r160571;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r160572 = 1.0;
double r160573 = b;
double r160574 = r160572 / r160573;
double r160575 = a;
double r160576 = r160572 / r160575;
double r160577 = r160574 + r160576;
return r160577;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.8 |
| Herbie | 3.1 |
Initial program 60.6
Taylor expanded around 0 58.4
Simplified58.4
rmApplied *-un-lft-identity58.4
Applied associate-*l*58.4
Simplified58.9
Taylor expanded around 0 3.1
Final simplification3.1
herbie shell --seed 2020045 +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))))