\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 r10318949 = eps;
double r10318950 = a;
double r10318951 = b;
double r10318952 = r10318950 + r10318951;
double r10318953 = r10318952 * r10318949;
double r10318954 = exp(r10318953);
double r10318955 = 1.0;
double r10318956 = r10318954 - r10318955;
double r10318957 = r10318949 * r10318956;
double r10318958 = r10318950 * r10318949;
double r10318959 = exp(r10318958);
double r10318960 = r10318959 - r10318955;
double r10318961 = r10318951 * r10318949;
double r10318962 = exp(r10318961);
double r10318963 = r10318962 - r10318955;
double r10318964 = r10318960 * r10318963;
double r10318965 = r10318957 / r10318964;
return r10318965;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r10318966 = 1.0;
double r10318967 = a;
double r10318968 = r10318966 / r10318967;
double r10318969 = b;
double r10318970 = r10318966 / r10318969;
double r10318971 = r10318968 + r10318970;
return r10318971;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 13.7 |
| Herbie | 3.3 |
Initial program 58.6
Taylor expanded around 0 55.8
Simplified54.8
Taylor expanded around 0 3.3
Final simplification3.3
herbie shell --seed 2019120
(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))))