\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 -1.8883079266888689 \cdot 10^{67} \lor \neg \left(b \le 1.92355889687172386 \cdot 10^{85}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left({\left(e^{b \cdot \varepsilon}\right)}^{3} - {1}^{3}\right)}{e^{b \cdot \varepsilon} \cdot e^{b \cdot \varepsilon} + \left(1 \cdot 1 + e^{b \cdot \varepsilon} \cdot 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{9}{2}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{9}{2}, {\varepsilon}^{2} \cdot {b}^{2}, 3 \cdot \left(\varepsilon \cdot b\right)\right)\right)}{e^{b \cdot \varepsilon} \cdot e^{b \cdot \varepsilon} + \left(1 \cdot 1 + e^{b \cdot \varepsilon} \cdot 1\right)}}\\
\end{array}double f(double a, double b, double eps) {
double r107410 = eps;
double r107411 = a;
double r107412 = b;
double r107413 = r107411 + r107412;
double r107414 = r107413 * r107410;
double r107415 = exp(r107414);
double r107416 = 1.0;
double r107417 = r107415 - r107416;
double r107418 = r107410 * r107417;
double r107419 = r107411 * r107410;
double r107420 = exp(r107419);
double r107421 = r107420 - r107416;
double r107422 = r107412 * r107410;
double r107423 = exp(r107422);
double r107424 = r107423 - r107416;
double r107425 = r107421 * r107424;
double r107426 = r107418 / r107425;
return r107426;
}
double f(double a, double b, double eps) {
double r107427 = b;
double r107428 = -1.888307926688869e+67;
bool r107429 = r107427 <= r107428;
double r107430 = 1.923558896871724e+85;
bool r107431 = r107427 <= r107430;
double r107432 = !r107431;
bool r107433 = r107429 || r107432;
double r107434 = eps;
double r107435 = a;
double r107436 = r107435 + r107427;
double r107437 = r107436 * r107434;
double r107438 = exp(r107437);
double r107439 = 1.0;
double r107440 = r107438 - r107439;
double r107441 = r107434 * r107440;
double r107442 = r107435 * r107434;
double r107443 = exp(r107442);
double r107444 = r107443 - r107439;
double r107445 = r107427 * r107434;
double r107446 = exp(r107445);
double r107447 = 3.0;
double r107448 = pow(r107446, r107447);
double r107449 = pow(r107439, r107447);
double r107450 = r107448 - r107449;
double r107451 = r107444 * r107450;
double r107452 = r107446 * r107446;
double r107453 = r107439 * r107439;
double r107454 = r107446 * r107439;
double r107455 = r107453 + r107454;
double r107456 = r107452 + r107455;
double r107457 = r107451 / r107456;
double r107458 = r107441 / r107457;
double r107459 = 4.5;
double r107460 = pow(r107434, r107447);
double r107461 = pow(r107427, r107447);
double r107462 = r107460 * r107461;
double r107463 = 2.0;
double r107464 = pow(r107434, r107463);
double r107465 = pow(r107427, r107463);
double r107466 = r107464 * r107465;
double r107467 = r107434 * r107427;
double r107468 = r107447 * r107467;
double r107469 = fma(r107459, r107466, r107468);
double r107470 = fma(r107459, r107462, r107469);
double r107471 = r107444 * r107470;
double r107472 = r107471 / r107456;
double r107473 = r107441 / r107472;
double r107474 = r107433 ? r107458 : r107473;
return r107474;
}




Bits error versus a




Bits error versus b




Bits error versus eps
| Original | 59.5 |
|---|---|
| Target | 16.7 |
| Herbie | 59.5 |
if b < -1.888307926688869e+67 or 1.923558896871724e+85 < b Initial program 49.0
rmApplied flip3--52.4
Applied associate-*r/52.4
if -1.888307926688869e+67 < b < 1.923558896871724e+85Initial program 63.5
rmApplied flip3--63.6
Applied associate-*r/63.6
Taylor expanded around 0 62.2
Simplified62.2
Final simplification59.5
herbie shell --seed 2020021 +o rules:numerics
(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))))