\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.3194785649155656 \cdot 10^{26}:\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(b \cdot \left(\left(\frac{1}{2} \cdot {\varepsilon}^{2}\right) \cdot b + \varepsilon\right) + \frac{1}{6} \cdot \left(\left(\left({\varepsilon}^{3} \cdot b\right) \cdot b\right) \cdot b\right)\right)}\\
\mathbf{elif}\;a \le 6.5664357011814966 \cdot 10^{46}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(a \cdot \varepsilon + {\varepsilon}^{2} \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \cdot \varepsilon\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(b \cdot \left(\left(\frac{1}{2} \cdot {\varepsilon}^{2}\right) \cdot b + \varepsilon\right) + \frac{1}{6} \cdot \left(\left(\left({\varepsilon}^{3} \cdot b\right) \cdot b\right) \cdot b\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r99004 = eps;
double r99005 = a;
double r99006 = b;
double r99007 = r99005 + r99006;
double r99008 = r99007 * r99004;
double r99009 = exp(r99008);
double r99010 = 1.0;
double r99011 = r99009 - r99010;
double r99012 = r99004 * r99011;
double r99013 = r99005 * r99004;
double r99014 = exp(r99013);
double r99015 = r99014 - r99010;
double r99016 = r99006 * r99004;
double r99017 = exp(r99016);
double r99018 = r99017 - r99010;
double r99019 = r99015 * r99018;
double r99020 = r99012 / r99019;
return r99020;
}
double f(double a, double b, double eps) {
double r99021 = a;
double r99022 = -2.3194785649155656e+26;
bool r99023 = r99021 <= r99022;
double r99024 = eps;
double r99025 = b;
double r99026 = r99021 + r99025;
double r99027 = r99026 * r99024;
double r99028 = exp(r99027);
double r99029 = 1.0;
double r99030 = r99028 - r99029;
double r99031 = 3.0;
double r99032 = pow(r99030, r99031);
double r99033 = cbrt(r99032);
double r99034 = r99024 * r99033;
double r99035 = r99021 * r99024;
double r99036 = exp(r99035);
double r99037 = r99036 - r99029;
double r99038 = 0.5;
double r99039 = 2.0;
double r99040 = pow(r99024, r99039);
double r99041 = r99038 * r99040;
double r99042 = r99041 * r99025;
double r99043 = r99042 + r99024;
double r99044 = r99025 * r99043;
double r99045 = 0.16666666666666666;
double r99046 = pow(r99024, r99031);
double r99047 = r99046 * r99025;
double r99048 = r99047 * r99025;
double r99049 = r99048 * r99025;
double r99050 = r99045 * r99049;
double r99051 = r99044 + r99050;
double r99052 = r99037 * r99051;
double r99053 = r99034 / r99052;
double r99054 = 6.566435701181497e+46;
bool r99055 = r99021 <= r99054;
double r99056 = r99024 * r99030;
double r99057 = pow(r99021, r99039);
double r99058 = r99038 * r99057;
double r99059 = pow(r99021, r99031);
double r99060 = r99045 * r99059;
double r99061 = r99060 * r99024;
double r99062 = r99058 + r99061;
double r99063 = r99040 * r99062;
double r99064 = r99035 + r99063;
double r99065 = r99025 * r99024;
double r99066 = exp(r99065);
double r99067 = r99066 - r99029;
double r99068 = r99064 * r99067;
double r99069 = r99056 / r99068;
double r99070 = r99056 / r99052;
double r99071 = r99055 ? r99069 : r99070;
double r99072 = r99023 ? r99053 : r99071;
return r99072;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.1 |
| Herbie | 52.7 |
if a < -2.3194785649155656e+26Initial program 54.8
Taylor expanded around 0 49.0
Simplified48.6
rmApplied unpow348.6
Applied associate-*r*47.8
Simplified46.4
rmApplied add-cbrt-cube46.4
Simplified46.4
if -2.3194785649155656e+26 < a < 6.566435701181497e+46Initial program 63.8
Taylor expanded around 0 56.5
Simplified56.5
if 6.566435701181497e+46 < a Initial program 54.6
Taylor expanded around 0 49.2
Simplified49.0
rmApplied unpow349.0
Applied associate-*r*48.1
Simplified46.4
Final simplification52.7
herbie shell --seed 2020047
(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))))