\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}\;\varepsilon \le 5.3360736243582115 \cdot 10^{-31}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right) + e^{\left(a + b\right) \cdot \varepsilon}}\\
\end{array}double f(double a, double b, double eps) {
double r91401 = eps;
double r91402 = a;
double r91403 = b;
double r91404 = r91402 + r91403;
double r91405 = r91404 * r91401;
double r91406 = exp(r91405);
double r91407 = 1.0;
double r91408 = r91406 - r91407;
double r91409 = r91401 * r91408;
double r91410 = r91402 * r91401;
double r91411 = exp(r91410);
double r91412 = r91411 - r91407;
double r91413 = r91403 * r91401;
double r91414 = exp(r91413);
double r91415 = r91414 - r91407;
double r91416 = r91412 * r91415;
double r91417 = r91409 / r91416;
return r91417;
}
double f(double a, double b, double eps) {
double r91418 = eps;
double r91419 = 5.3360736243582115e-31;
bool r91420 = r91418 <= r91419;
double r91421 = 1.0;
double r91422 = b;
double r91423 = r91421 / r91422;
double r91424 = a;
double r91425 = r91421 / r91424;
double r91426 = r91423 + r91425;
double r91427 = r91424 + r91422;
double r91428 = r91427 * r91418;
double r91429 = exp(r91428);
double r91430 = 1.0;
double r91431 = r91429 - r91430;
double r91432 = r91418 * r91431;
double r91433 = r91422 * r91418;
double r91434 = exp(r91433);
double r91435 = r91424 * r91418;
double r91436 = exp(r91435);
double r91437 = r91434 + r91436;
double r91438 = r91430 * r91437;
double r91439 = r91430 - r91438;
double r91440 = r91439 + r91429;
double r91441 = r91432 / r91440;
double r91442 = r91420 ? r91426 : r91441;
return r91442;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 14.6 |
| Herbie | 4.8 |
if eps < 5.3360736243582115e-31Initial program 60.8
Taylor expanded around 0 2.9
if 5.3360736243582115e-31 < eps Initial program 50.7
Taylor expanded around inf 55.1
Simplified50.7
Final simplification4.8
herbie shell --seed 2020046
(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))))