\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} + \frac{1}{b}double f(double a, double b, double eps) {
double r3195102 = eps;
double r3195103 = a;
double r3195104 = b;
double r3195105 = r3195103 + r3195104;
double r3195106 = r3195105 * r3195102;
double r3195107 = exp(r3195106);
double r3195108 = 1.0;
double r3195109 = r3195107 - r3195108;
double r3195110 = r3195102 * r3195109;
double r3195111 = r3195103 * r3195102;
double r3195112 = exp(r3195111);
double r3195113 = r3195112 - r3195108;
double r3195114 = r3195104 * r3195102;
double r3195115 = exp(r3195114);
double r3195116 = r3195115 - r3195108;
double r3195117 = r3195113 * r3195116;
double r3195118 = r3195110 / r3195117;
return r3195118;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r3195119 = 1.0;
double r3195120 = a;
double r3195121 = r3195119 / r3195120;
double r3195122 = b;
double r3195123 = r3195119 / r3195122;
double r3195124 = r3195121 + r3195123;
return r3195124;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 14.3 |
| Herbie | 3.4 |
Initial program 58.6
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019137
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))