\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 r147654 = eps;
double r147655 = a;
double r147656 = b;
double r147657 = r147655 + r147656;
double r147658 = r147657 * r147654;
double r147659 = exp(r147658);
double r147660 = 1.0;
double r147661 = r147659 - r147660;
double r147662 = r147654 * r147661;
double r147663 = r147655 * r147654;
double r147664 = exp(r147663);
double r147665 = r147664 - r147660;
double r147666 = r147656 * r147654;
double r147667 = exp(r147666);
double r147668 = r147667 - r147660;
double r147669 = r147665 * r147668;
double r147670 = r147662 / r147669;
return r147670;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r147671 = 1.0;
double r147672 = b;
double r147673 = r147671 / r147672;
double r147674 = a;
double r147675 = r147671 / r147674;
double r147676 = r147673 + r147675;
return r147676;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.2 |
|---|---|
| Target | 15.2 |
| Herbie | 3.5 |
Initial program 60.2
Taylor expanded around 0 57.9
Simplified57.9
Taylor expanded around 0 56.9
Simplified56.9
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2020020 +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))))