\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.3529465240552971988881604336729755856 \cdot 10^{80} \lor \neg \left(a \le 8.49205507659549180334390020270641032806 \cdot 10^{150}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(b \cdot \left(b \cdot \left(\left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b + \frac{1}{2} \cdot \left(\varepsilon \cdot \varepsilon\right)\right) + \varepsilon\right)\right) \cdot \left(e^{a \cdot \varepsilon} - 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(a \cdot \varepsilon + \sqrt[3]{{\left(\varepsilon \cdot \left(\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {a}^{3}\right) \cdot \varepsilon + \frac{1}{2} \cdot \left(a \cdot a\right)\right)\right)\right)}^{3}}\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r71141 = eps;
double r71142 = a;
double r71143 = b;
double r71144 = r71142 + r71143;
double r71145 = r71144 * r71141;
double r71146 = exp(r71145);
double r71147 = 1.0;
double r71148 = r71146 - r71147;
double r71149 = r71141 * r71148;
double r71150 = r71142 * r71141;
double r71151 = exp(r71150);
double r71152 = r71151 - r71147;
double r71153 = r71143 * r71141;
double r71154 = exp(r71153);
double r71155 = r71154 - r71147;
double r71156 = r71152 * r71155;
double r71157 = r71149 / r71156;
return r71157;
}
double f(double a, double b, double eps) {
double r71158 = a;
double r71159 = -2.3529465240552972e+80;
bool r71160 = r71158 <= r71159;
double r71161 = 8.492055076595492e+150;
bool r71162 = r71158 <= r71161;
double r71163 = !r71162;
bool r71164 = r71160 || r71163;
double r71165 = eps;
double r71166 = b;
double r71167 = r71158 + r71166;
double r71168 = r71167 * r71165;
double r71169 = exp(r71168);
double r71170 = 1.0;
double r71171 = r71169 - r71170;
double r71172 = r71165 * r71171;
double r71173 = 0.16666666666666666;
double r71174 = 3.0;
double r71175 = pow(r71165, r71174);
double r71176 = r71173 * r71175;
double r71177 = r71176 * r71166;
double r71178 = 0.5;
double r71179 = r71165 * r71165;
double r71180 = r71178 * r71179;
double r71181 = r71177 + r71180;
double r71182 = r71166 * r71181;
double r71183 = r71182 + r71165;
double r71184 = r71166 * r71183;
double r71185 = r71158 * r71165;
double r71186 = exp(r71185);
double r71187 = r71186 - r71170;
double r71188 = r71184 * r71187;
double r71189 = r71172 / r71188;
double r71190 = pow(r71158, r71174);
double r71191 = r71173 * r71190;
double r71192 = r71191 * r71165;
double r71193 = r71158 * r71158;
double r71194 = r71178 * r71193;
double r71195 = r71192 + r71194;
double r71196 = r71165 * r71195;
double r71197 = r71165 * r71196;
double r71198 = pow(r71197, r71174);
double r71199 = cbrt(r71198);
double r71200 = r71185 + r71199;
double r71201 = r71166 * r71165;
double r71202 = exp(r71201);
double r71203 = r71202 - r71170;
double r71204 = r71200 * r71203;
double r71205 = r71172 / r71204;
double r71206 = r71164 ? r71189 : r71205;
return r71206;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.5 |
|---|---|
| Target | 14.7 |
| Herbie | 52.3 |
if a < -2.3529465240552972e+80 or 8.492055076595492e+150 < a Initial program 53.3
Taylor expanded around 0 45.9
Simplified42.2
rmApplied *-un-lft-identity42.2
Applied associate-*l*42.2
Simplified40.8
if -2.3529465240552972e+80 < a < 8.492055076595492e+150Initial program 62.9
Taylor expanded around 0 56.3
Simplified56.3
rmApplied add-cbrt-cube56.9
Applied add-cbrt-cube56.9
Applied add-cbrt-cube56.9
Applied cbrt-unprod57.0
Applied cbrt-unprod57.0
Simplified56.2
Final simplification52.3
herbie shell --seed 2019326
(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))))