\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 -3.0120510137650696 \cdot 10^{+125}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\mathbf{elif}\;a \le 218302460416680.75:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) + \left(\left(\left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) \cdot \left(a \cdot \frac{1}{6}\right)\right) \cdot \varepsilon + \varepsilon \cdot a\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r14664703 = eps;
double r14664704 = a;
double r14664705 = b;
double r14664706 = r14664704 + r14664705;
double r14664707 = r14664706 * r14664703;
double r14664708 = exp(r14664707);
double r14664709 = 1.0;
double r14664710 = r14664708 - r14664709;
double r14664711 = r14664703 * r14664710;
double r14664712 = r14664704 * r14664703;
double r14664713 = exp(r14664712);
double r14664714 = r14664713 - r14664709;
double r14664715 = r14664705 * r14664703;
double r14664716 = exp(r14664715);
double r14664717 = r14664716 - r14664709;
double r14664718 = r14664714 * r14664717;
double r14664719 = r14664711 / r14664718;
return r14664719;
}
double f(double a, double b, double eps) {
double r14664720 = a;
double r14664721 = -3.0120510137650696e+125;
bool r14664722 = r14664720 <= r14664721;
double r14664723 = eps;
double r14664724 = b;
double r14664725 = r14664720 + r14664724;
double r14664726 = r14664723 * r14664725;
double r14664727 = exp(r14664726);
double r14664728 = 1.0;
double r14664729 = r14664727 - r14664728;
double r14664730 = r14664723 * r14664729;
double r14664731 = r14664723 * r14664724;
double r14664732 = 0.5;
double r14664733 = r14664731 * r14664731;
double r14664734 = r14664732 * r14664733;
double r14664735 = r14664733 * r14664724;
double r14664736 = r14664723 * r14664735;
double r14664737 = 0.16666666666666666;
double r14664738 = r14664736 * r14664737;
double r14664739 = r14664734 + r14664738;
double r14664740 = r14664731 + r14664739;
double r14664741 = r14664723 * r14664720;
double r14664742 = exp(r14664741);
double r14664743 = r14664742 - r14664728;
double r14664744 = r14664740 * r14664743;
double r14664745 = r14664730 / r14664744;
double r14664746 = 218302460416680.75;
bool r14664747 = r14664720 <= r14664746;
double r14664748 = exp(r14664731);
double r14664749 = r14664748 - r14664728;
double r14664750 = r14664741 * r14664741;
double r14664751 = r14664732 * r14664750;
double r14664752 = r14664720 * r14664737;
double r14664753 = r14664750 * r14664752;
double r14664754 = r14664753 * r14664723;
double r14664755 = r14664754 + r14664741;
double r14664756 = r14664751 + r14664755;
double r14664757 = r14664749 * r14664756;
double r14664758 = r14664730 / r14664757;
double r14664759 = r14664747 ? r14664758 : r14664745;
double r14664760 = r14664722 ? r14664745 : r14664759;
return r14664760;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.6 |
|---|---|
| Target | 14.3 |
| Herbie | 51.1 |
if a < -3.0120510137650696e+125 or 218302460416680.75 < a Initial program 53.0
Taylor expanded around 0 46.8
Simplified43.8
if -3.0120510137650696e+125 < a < 218302460416680.75Initial program 61.4
Taylor expanded around 0 55.0
Simplified54.8
Final simplification51.1
herbie shell --seed 2019124
(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))))