\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 -1.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{1}{6}, \left(\left({\varepsilon}^{3} \cdot b\right) \cdot b\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {\varepsilon}^{3}, \mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {\varepsilon}^{2}, a \cdot \varepsilon\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r121264 = eps;
double r121265 = a;
double r121266 = b;
double r121267 = r121265 + r121266;
double r121268 = r121267 * r121264;
double r121269 = exp(r121268);
double r121270 = 1.0;
double r121271 = r121269 - r121270;
double r121272 = r121264 * r121271;
double r121273 = r121265 * r121264;
double r121274 = exp(r121273);
double r121275 = r121274 - r121270;
double r121276 = r121266 * r121264;
double r121277 = exp(r121276);
double r121278 = r121277 - r121270;
double r121279 = r121275 * r121278;
double r121280 = r121272 / r121279;
return r121280;
}
double f(double a, double b, double eps) {
double r121281 = a;
double r121282 = -1.9693375139914443e+72;
bool r121283 = r121281 <= r121282;
double r121284 = 9.716140837926457e+126;
bool r121285 = r121281 <= r121284;
double r121286 = !r121285;
bool r121287 = r121283 || r121286;
double r121288 = eps;
double r121289 = b;
double r121290 = r121281 + r121289;
double r121291 = r121290 * r121288;
double r121292 = exp(r121291);
double r121293 = 1.0;
double r121294 = r121292 - r121293;
double r121295 = 3.0;
double r121296 = pow(r121294, r121295);
double r121297 = cbrt(r121296);
double r121298 = r121288 * r121297;
double r121299 = r121281 * r121288;
double r121300 = exp(r121299);
double r121301 = r121300 - r121293;
double r121302 = 0.16666666666666666;
double r121303 = pow(r121288, r121295);
double r121304 = r121303 * r121289;
double r121305 = r121304 * r121289;
double r121306 = cbrt(r121289);
double r121307 = pow(r121306, r121295);
double r121308 = r121305 * r121307;
double r121309 = 0.5;
double r121310 = 2.0;
double r121311 = pow(r121288, r121310);
double r121312 = pow(r121289, r121310);
double r121313 = r121311 * r121312;
double r121314 = r121288 * r121289;
double r121315 = fma(r121309, r121313, r121314);
double r121316 = fma(r121302, r121308, r121315);
double r121317 = r121301 * r121316;
double r121318 = r121298 / r121317;
double r121319 = r121288 * r121294;
double r121320 = pow(r121281, r121295);
double r121321 = r121320 * r121303;
double r121322 = pow(r121281, r121310);
double r121323 = r121322 * r121311;
double r121324 = fma(r121309, r121323, r121299);
double r121325 = fma(r121302, r121321, r121324);
double r121326 = r121289 * r121288;
double r121327 = exp(r121326);
double r121328 = r121327 - r121293;
double r121329 = r121325 * r121328;
double r121330 = r121319 / r121329;
double r121331 = r121287 ? r121318 : r121330;
return r121331;
}




Bits error versus a




Bits error versus b




Bits error versus eps
| Original | 60.2 |
|---|---|
| Target | 14.9 |
| Herbie | 53.5 |
if a < -1.9693375139914443e+72 or 9.716140837926457e+126 < a Initial program 52.9
Taylor expanded around 0 46.9
Simplified46.9
rmApplied add-cube-cbrt46.9
Applied unpow-prod-down46.9
Applied associate-*r*46.0
Simplified45.3
rmApplied add-cbrt-cube45.4
Simplified45.4
if -1.9693375139914443e+72 < a < 9.716140837926457e+126Initial program 63.0
Taylor expanded around 0 56.5
Simplified56.5
Final simplification53.5
herbie shell --seed 2020001 +o rules:numerics
(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))))