\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} + \left(\frac{1}{2} \cdot \frac{a \cdot \varepsilon}{b} + \frac{1}{b}\right)double f(double a, double b, double eps) {
double r134575 = eps;
double r134576 = a;
double r134577 = b;
double r134578 = r134576 + r134577;
double r134579 = r134578 * r134575;
double r134580 = exp(r134579);
double r134581 = 1.0;
double r134582 = r134580 - r134581;
double r134583 = r134575 * r134582;
double r134584 = r134576 * r134575;
double r134585 = exp(r134584);
double r134586 = r134585 - r134581;
double r134587 = r134577 * r134575;
double r134588 = exp(r134587);
double r134589 = r134588 - r134581;
double r134590 = r134586 * r134589;
double r134591 = r134583 / r134590;
return r134591;
}
double f(double a, double b, double eps) {
double r134592 = 1.0;
double r134593 = a;
double r134594 = r134592 / r134593;
double r134595 = 0.5;
double r134596 = eps;
double r134597 = r134593 * r134596;
double r134598 = b;
double r134599 = r134597 / r134598;
double r134600 = r134595 * r134599;
double r134601 = r134592 / r134598;
double r134602 = r134600 + r134601;
double r134603 = r134594 + r134602;
return r134603;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.6 |
|---|---|
| Target | 14.8 |
| Herbie | 11.0 |
Initial program 60.6
Taylor expanded around 0 58.4
Simplified58.4
rmApplied pow-prod-down57.7
Taylor expanded around 0 57.2
Taylor expanded around 0 11.0
Final simplification11.0
herbie shell --seed 2020045
(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))))