\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}\;a \le 9.568816560533687 \cdot 10^{+240}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\mathbf{elif}\;a \le 2.5364343459522345 \cdot 10^{+271}:\\
\;\;\;\;\frac{\left({\left(e^{b + a}\right)}^{\varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right)}{\left(\left(b \cdot \varepsilon\right) \cdot \left(\left(b \cdot \varepsilon\right) \cdot \frac{1}{2}\right) + \left(\left(\varepsilon \cdot \left(\left(b \cdot \varepsilon\right) \cdot \left(b \cdot \varepsilon\right)\right)\right) \cdot \frac{1}{6} + \varepsilon\right) \cdot b\right) \cdot \left(e^{a \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r4145667 = eps;
double r4145668 = a;
double r4145669 = b;
double r4145670 = r4145668 + r4145669;
double r4145671 = r4145670 * r4145667;
double r4145672 = exp(r4145671);
double r4145673 = 1.0;
double r4145674 = r4145672 - r4145673;
double r4145675 = r4145667 * r4145674;
double r4145676 = r4145668 * r4145667;
double r4145677 = exp(r4145676);
double r4145678 = r4145677 - r4145673;
double r4145679 = r4145669 * r4145667;
double r4145680 = exp(r4145679);
double r4145681 = r4145680 - r4145673;
double r4145682 = r4145678 * r4145681;
double r4145683 = r4145675 / r4145682;
return r4145683;
}
double f(double a, double b, double eps) {
double r4145684 = a;
double r4145685 = 9.568816560533687e+240;
bool r4145686 = r4145684 <= r4145685;
double r4145687 = 1.0;
double r4145688 = b;
double r4145689 = r4145687 / r4145688;
double r4145690 = r4145687 / r4145684;
double r4145691 = r4145689 + r4145690;
double r4145692 = 2.5364343459522345e+271;
bool r4145693 = r4145684 <= r4145692;
double r4145694 = r4145688 + r4145684;
double r4145695 = exp(r4145694);
double r4145696 = eps;
double r4145697 = pow(r4145695, r4145696);
double r4145698 = r4145697 - r4145687;
double r4145699 = r4145698 * r4145696;
double r4145700 = r4145684 * r4145696;
double r4145701 = exp(r4145700);
double r4145702 = r4145701 - r4145687;
double r4145703 = r4145688 * r4145696;
double r4145704 = exp(r4145703);
double r4145705 = r4145704 - r4145687;
double r4145706 = r4145702 * r4145705;
double r4145707 = r4145699 / r4145706;
double r4145708 = r4145696 * r4145694;
double r4145709 = exp(r4145708);
double r4145710 = r4145709 - r4145687;
double r4145711 = r4145696 * r4145710;
double r4145712 = 0.5;
double r4145713 = r4145703 * r4145712;
double r4145714 = r4145703 * r4145713;
double r4145715 = r4145703 * r4145703;
double r4145716 = r4145696 * r4145715;
double r4145717 = 0.16666666666666666;
double r4145718 = r4145716 * r4145717;
double r4145719 = r4145718 + r4145696;
double r4145720 = r4145719 * r4145688;
double r4145721 = r4145714 + r4145720;
double r4145722 = r4145721 * r4145702;
double r4145723 = r4145711 / r4145722;
double r4145724 = r4145693 ? r4145707 : r4145723;
double r4145725 = r4145686 ? r4145691 : r4145724;
return r4145725;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 14.0 |
| Herbie | 4.4 |
if a < 9.568816560533687e+240Initial program 59.0
Taylor expanded around 0 56.0
Simplified55.0
Taylor expanded around 0 3.0
if 9.568816560533687e+240 < a < 2.5364343459522345e+271Initial program 48.4
rmApplied exp-prod48.6
if 2.5364343459522345e+271 < a Initial program 48.6
Taylor expanded around 0 37.4
Simplified26.8
Final simplification4.4
herbie shell --seed 2019141
(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))))