\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 -2.149494606308064458906089789806896623859 \cdot 10^{206}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\sqrt[3]{{\left(\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{a \cdot \varepsilon} - 1\right)\right)}^{3}}}\\
\mathbf{elif}\;a \le -42654372502725921665725083421119241781250 \lor \neg \left(a \le 1.862763256825556893564988492089441740766 \cdot 10^{124}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left({\varepsilon}^{3} \cdot {b}^{3}\right) + b \cdot \left(\varepsilon + \left(\frac{1}{2} \cdot {\varepsilon}^{2}\right) \cdot b\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot {\left(\varepsilon \cdot a\right)}^{3} + \varepsilon \cdot \left(\left(\frac{1}{2} \cdot {a}^{2}\right) \cdot \varepsilon + a\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r107783 = eps;
double r107784 = a;
double r107785 = b;
double r107786 = r107784 + r107785;
double r107787 = r107786 * r107783;
double r107788 = exp(r107787);
double r107789 = 1.0;
double r107790 = r107788 - r107789;
double r107791 = r107783 * r107790;
double r107792 = r107784 * r107783;
double r107793 = exp(r107792);
double r107794 = r107793 - r107789;
double r107795 = r107785 * r107783;
double r107796 = exp(r107795);
double r107797 = r107796 - r107789;
double r107798 = r107794 * r107797;
double r107799 = r107791 / r107798;
return r107799;
}
double f(double a, double b, double eps) {
double r107800 = a;
double r107801 = -2.1494946063080645e+206;
bool r107802 = r107800 <= r107801;
double r107803 = eps;
double r107804 = b;
double r107805 = r107800 + r107804;
double r107806 = r107805 * r107803;
double r107807 = exp(r107806);
double r107808 = 1.0;
double r107809 = r107807 - r107808;
double r107810 = r107803 * r107809;
double r107811 = r107803 * r107804;
double r107812 = exp(r107811);
double r107813 = r107812 - r107808;
double r107814 = r107800 * r107803;
double r107815 = exp(r107814);
double r107816 = r107815 - r107808;
double r107817 = r107813 * r107816;
double r107818 = 3.0;
double r107819 = pow(r107817, r107818);
double r107820 = cbrt(r107819);
double r107821 = r107810 / r107820;
double r107822 = -4.265437250272592e+40;
bool r107823 = r107800 <= r107822;
double r107824 = 1.862763256825557e+124;
bool r107825 = r107800 <= r107824;
double r107826 = !r107825;
bool r107827 = r107823 || r107826;
double r107828 = 0.16666666666666666;
double r107829 = pow(r107803, r107818);
double r107830 = pow(r107804, r107818);
double r107831 = r107829 * r107830;
double r107832 = r107828 * r107831;
double r107833 = 0.5;
double r107834 = 2.0;
double r107835 = pow(r107803, r107834);
double r107836 = r107833 * r107835;
double r107837 = r107836 * r107804;
double r107838 = r107803 + r107837;
double r107839 = r107804 * r107838;
double r107840 = r107832 + r107839;
double r107841 = r107816 * r107840;
double r107842 = r107810 / r107841;
double r107843 = r107803 * r107800;
double r107844 = pow(r107843, r107818);
double r107845 = r107828 * r107844;
double r107846 = pow(r107800, r107834);
double r107847 = r107833 * r107846;
double r107848 = r107847 * r107803;
double r107849 = r107848 + r107800;
double r107850 = r107803 * r107849;
double r107851 = r107845 + r107850;
double r107852 = r107804 * r107803;
double r107853 = exp(r107852);
double r107854 = r107853 - r107808;
double r107855 = r107851 * r107854;
double r107856 = r107810 / r107855;
double r107857 = r107827 ? r107842 : r107856;
double r107858 = r107802 ? r107821 : r107857;
return r107858;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.0 |
| Herbie | 54.1 |
if a < -2.1494946063080645e+206Initial program 48.9
rmApplied add-cbrt-cube48.9
Applied add-cbrt-cube48.9
Applied cbrt-unprod48.9
Simplified48.9
if -2.1494946063080645e+206 < a < -4.265437250272592e+40 or 1.862763256825557e+124 < a Initial program 54.6
Taylor expanded around 0 49.4
Simplified48.9
if -4.265437250272592e+40 < a < 1.862763256825557e+124Initial program 63.3
Taylor expanded around 0 56.4
Simplified56.4
rmApplied pow-prod-down56.3
Simplified56.3
Final simplification54.1
herbie shell --seed 2019303
(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))))