\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)}\begin{array}{l}
\mathbf{if}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} = -\infty:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\mathbf{elif}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} \le 2.7242283277550334 \cdot 10^{-62}:\\
\;\;\;\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\end{array}double f(double a, double b, double eps) {
double r1524334 = eps;
double r1524335 = a;
double r1524336 = b;
double r1524337 = r1524335 + r1524336;
double r1524338 = r1524337 * r1524334;
double r1524339 = exp(r1524338);
double r1524340 = 1.0;
double r1524341 = r1524339 - r1524340;
double r1524342 = r1524334 * r1524341;
double r1524343 = r1524335 * r1524334;
double r1524344 = exp(r1524343);
double r1524345 = r1524344 - r1524340;
double r1524346 = r1524336 * r1524334;
double r1524347 = exp(r1524346);
double r1524348 = r1524347 - r1524340;
double r1524349 = r1524345 * r1524348;
double r1524350 = r1524342 / r1524349;
return r1524350;
}
double f(double a, double b, double eps) {
double r1524351 = a;
double r1524352 = b;
double r1524353 = r1524351 + r1524352;
double r1524354 = eps;
double r1524355 = r1524353 * r1524354;
double r1524356 = exp(r1524355);
double r1524357 = 1.0;
double r1524358 = r1524356 - r1524357;
double r1524359 = r1524358 * r1524354;
double r1524360 = r1524354 * r1524352;
double r1524361 = exp(r1524360);
double r1524362 = r1524361 - r1524357;
double r1524363 = r1524354 * r1524351;
double r1524364 = exp(r1524363);
double r1524365 = r1524364 - r1524357;
double r1524366 = r1524362 * r1524365;
double r1524367 = r1524359 / r1524366;
double r1524368 = -inf.0;
bool r1524369 = r1524367 <= r1524368;
double r1524370 = r1524357 / r1524352;
double r1524371 = r1524357 / r1524351;
double r1524372 = r1524370 + r1524371;
double r1524373 = 2.7242283277550334e-62;
bool r1524374 = r1524367 <= r1524373;
double r1524375 = r1524374 ? r1524367 : r1524372;
double r1524376 = r1524369 ? r1524372 : r1524375;
return r1524376;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.8 |
|---|---|
| Target | 14.1 |
| Herbie | 0.6 |
if (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < -inf.0 or 2.7242283277550334e-62 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) Initial program 61.8
Taylor expanded around 0 56.6
Simplified56.6
Taylor expanded around 0 0.4
if -inf.0 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < 2.7242283277550334e-62Initial program 4.3
Final simplification0.6
herbie shell --seed 2019154
(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))))