\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}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} = -\infty:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\mathbf{elif}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} \le 0.004832980056266303:\\
\;\;\;\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \left(\left(\sqrt{e^{\varepsilon \cdot b}} + 1\right) \cdot \left(\sqrt[3]{\sqrt{e^{\varepsilon \cdot b}} - 1} \cdot \left(\sqrt[3]{\sqrt{e^{\varepsilon \cdot b}} - 1} \cdot \sqrt[3]{\sqrt{e^{\varepsilon \cdot b}} - 1}\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\end{array}double f(double a, double b, double eps) {
double r25251018 = eps;
double r25251019 = a;
double r25251020 = b;
double r25251021 = r25251019 + r25251020;
double r25251022 = r25251021 * r25251018;
double r25251023 = exp(r25251022);
double r25251024 = 1.0;
double r25251025 = r25251023 - r25251024;
double r25251026 = r25251018 * r25251025;
double r25251027 = r25251019 * r25251018;
double r25251028 = exp(r25251027);
double r25251029 = r25251028 - r25251024;
double r25251030 = r25251020 * r25251018;
double r25251031 = exp(r25251030);
double r25251032 = r25251031 - r25251024;
double r25251033 = r25251029 * r25251032;
double r25251034 = r25251026 / r25251033;
return r25251034;
}
double f(double a, double b, double eps) {
double r25251035 = a;
double r25251036 = b;
double r25251037 = r25251035 + r25251036;
double r25251038 = eps;
double r25251039 = r25251037 * r25251038;
double r25251040 = exp(r25251039);
double r25251041 = 1.0;
double r25251042 = r25251040 - r25251041;
double r25251043 = r25251042 * r25251038;
double r25251044 = r25251038 * r25251036;
double r25251045 = exp(r25251044);
double r25251046 = r25251045 - r25251041;
double r25251047 = r25251038 * r25251035;
double r25251048 = exp(r25251047);
double r25251049 = r25251048 - r25251041;
double r25251050 = r25251046 * r25251049;
double r25251051 = r25251043 / r25251050;
double r25251052 = -inf.0;
bool r25251053 = r25251051 <= r25251052;
double r25251054 = r25251041 / r25251036;
double r25251055 = r25251041 / r25251035;
double r25251056 = r25251054 + r25251055;
double r25251057 = 0.004832980056266303;
bool r25251058 = r25251051 <= r25251057;
double r25251059 = sqrt(r25251045);
double r25251060 = r25251059 + r25251041;
double r25251061 = r25251059 - r25251041;
double r25251062 = cbrt(r25251061);
double r25251063 = r25251062 * r25251062;
double r25251064 = r25251062 * r25251063;
double r25251065 = r25251060 * r25251064;
double r25251066 = r25251049 * r25251065;
double r25251067 = r25251043 / r25251066;
double r25251068 = r25251058 ? r25251067 : r25251056;
double r25251069 = r25251053 ? r25251056 : r25251068;
return r25251069;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.7 |
|---|---|
| Target | 14.5 |
| Herbie | 0.2 |
if (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < -inf.0 or 0.004832980056266303 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) Initial program 62.1
Taylor expanded around 0 0.1
if -inf.0 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < 0.004832980056266303Initial program 3.2
rmApplied add-sqr-sqrt3.3
Applied difference-of-sqr-13.3
rmApplied add-cube-cbrt3.3
Final simplification0.2
herbie shell --seed 2019125
(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))))