\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}\;b \le -4.075922636405056 \cdot 10^{+263}:\\
\;\;\;\;\frac{(e^{\left(a + b\right) \cdot \varepsilon} - 1)^* \cdot \varepsilon}{(e^{a \cdot \varepsilon} - 1)^*} \cdot \frac{1}{(e^{\varepsilon \cdot b} - 1)^*}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{a} + \frac{1}{b}\\
\end{array}double f(double a, double b, double eps) {
double r6593453 = eps;
double r6593454 = a;
double r6593455 = b;
double r6593456 = r6593454 + r6593455;
double r6593457 = r6593456 * r6593453;
double r6593458 = exp(r6593457);
double r6593459 = 1.0;
double r6593460 = r6593458 - r6593459;
double r6593461 = r6593453 * r6593460;
double r6593462 = r6593454 * r6593453;
double r6593463 = exp(r6593462);
double r6593464 = r6593463 - r6593459;
double r6593465 = r6593455 * r6593453;
double r6593466 = exp(r6593465);
double r6593467 = r6593466 - r6593459;
double r6593468 = r6593464 * r6593467;
double r6593469 = r6593461 / r6593468;
return r6593469;
}
double f(double a, double b, double eps) {
double r6593470 = b;
double r6593471 = -4.075922636405056e+263;
bool r6593472 = r6593470 <= r6593471;
double r6593473 = a;
double r6593474 = r6593473 + r6593470;
double r6593475 = eps;
double r6593476 = r6593474 * r6593475;
double r6593477 = expm1(r6593476);
double r6593478 = r6593477 * r6593475;
double r6593479 = r6593473 * r6593475;
double r6593480 = expm1(r6593479);
double r6593481 = r6593478 / r6593480;
double r6593482 = 1.0;
double r6593483 = r6593475 * r6593470;
double r6593484 = expm1(r6593483);
double r6593485 = r6593482 / r6593484;
double r6593486 = r6593481 * r6593485;
double r6593487 = r6593482 / r6593473;
double r6593488 = r6593482 / r6593470;
double r6593489 = r6593487 + r6593488;
double r6593490 = r6593472 ? r6593486 : r6593489;
return r6593490;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.7 |
|---|---|
| Target | 14.5 |
| Herbie | 3.3 |
if b < -4.075922636405056e+263Initial program 44.7
Simplified18.0
rmApplied div-inv18.0
if -4.075922636405056e+263 < b Initial program 59.0
Simplified34.5
Taylor expanded around 0 3.0
Final simplification3.3
herbie shell --seed 2019104 +o rules:numerics
(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))))