\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 r28960 = eps;
double r28961 = a;
double r28962 = b;
double r28963 = r28961 + r28962;
double r28964 = r28963 * r28960;
double r28965 = exp(r28964);
double r28966 = 1.0;
double r28967 = r28965 - r28966;
double r28968 = r28960 * r28967;
double r28969 = r28961 * r28960;
double r28970 = exp(r28969);
double r28971 = r28970 - r28966;
double r28972 = r28962 * r28960;
double r28973 = exp(r28972);
double r28974 = r28973 - r28966;
double r28975 = r28971 * r28974;
double r28976 = r28968 / r28975;
return r28976;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r28977 = 1.0;
double r28978 = b;
double r28979 = r28977 / r28978;
double r28980 = a;
double r28981 = r28977 / r28980;
double r28982 = r28979 + r28981;
return r28982;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.2 |
| Herbie | 3.4 |
Initial program 60.3
Taylor expanded around 0 3.4
Final simplification3.4
herbie shell --seed 2019323 +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))))