\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 r85193 = eps;
double r85194 = a;
double r85195 = b;
double r85196 = r85194 + r85195;
double r85197 = r85196 * r85193;
double r85198 = exp(r85197);
double r85199 = 1.0;
double r85200 = r85198 - r85199;
double r85201 = r85193 * r85200;
double r85202 = r85194 * r85193;
double r85203 = exp(r85202);
double r85204 = r85203 - r85199;
double r85205 = r85195 * r85193;
double r85206 = exp(r85205);
double r85207 = r85206 - r85199;
double r85208 = r85204 * r85207;
double r85209 = r85201 / r85208;
return r85209;
}
double f(double a, double b, double __attribute__((unused)) eps) {
double r85210 = 1.0;
double r85211 = a;
double r85212 = r85210 / r85211;
double r85213 = b;
double r85214 = r85210 / r85213;
double r85215 = r85212 + r85214;
return r85215;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.0 |
| Herbie | 3.5 |
Initial program 60.3
Simplified60.3
Taylor expanded around 0 57.9
Simplified57.9
Taylor expanded around 0 56.8
Simplified56.6
Taylor expanded around 0 3.5
Final simplification3.5
herbie shell --seed 2019174 +o rules:numerics
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:pre (and (< -1.0 eps) (< eps 1.0))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1.0)) (* (- (exp (* a eps)) 1.0) (- (exp (* b eps)) 1.0))))