\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.0320051143206995951819976248147559254 \cdot 10^{110}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \frac{\mathsf{fma}\left(-1, 1, {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}\right)}{e^{b \cdot \varepsilon} + 1}}\\
\mathbf{elif}\;a \le 1.604590383414174745639109777851955666043 \cdot 10^{73}:\\
\;\;\;\;\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)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{1}{6}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r112276 = eps;
double r112277 = a;
double r112278 = b;
double r112279 = r112277 + r112278;
double r112280 = r112279 * r112276;
double r112281 = exp(r112280);
double r112282 = 1.0;
double r112283 = r112281 - r112282;
double r112284 = r112276 * r112283;
double r112285 = r112277 * r112276;
double r112286 = exp(r112285);
double r112287 = r112286 - r112282;
double r112288 = r112278 * r112276;
double r112289 = exp(r112288);
double r112290 = r112289 - r112282;
double r112291 = r112287 * r112290;
double r112292 = r112284 / r112291;
return r112292;
}
double f(double a, double b, double eps) {
double r112293 = a;
double r112294 = -1.0320051143206996e+110;
bool r112295 = r112293 <= r112294;
double r112296 = eps;
double r112297 = b;
double r112298 = r112293 + r112297;
double r112299 = r112298 * r112296;
double r112300 = exp(r112299);
double r112301 = 1.0;
double r112302 = r112300 - r112301;
double r112303 = r112296 * r112302;
double r112304 = r112293 * r112296;
double r112305 = exp(r112304);
double r112306 = r112305 - r112301;
double r112307 = -r112301;
double r112308 = exp(r112297);
double r112309 = 2.0;
double r112310 = r112309 * r112296;
double r112311 = pow(r112308, r112310);
double r112312 = fma(r112307, r112301, r112311);
double r112313 = r112297 * r112296;
double r112314 = exp(r112313);
double r112315 = r112314 + r112301;
double r112316 = r112312 / r112315;
double r112317 = r112306 * r112316;
double r112318 = r112303 / r112317;
double r112319 = 1.6045903834141747e+73;
bool r112320 = r112293 <= r112319;
double r112321 = 0.16666666666666666;
double r112322 = 3.0;
double r112323 = pow(r112293, r112322);
double r112324 = pow(r112296, r112322);
double r112325 = r112323 * r112324;
double r112326 = 0.5;
double r112327 = pow(r112293, r112309);
double r112328 = pow(r112296, r112309);
double r112329 = r112327 * r112328;
double r112330 = fma(r112326, r112329, r112304);
double r112331 = fma(r112321, r112325, r112330);
double r112332 = r112314 - r112301;
double r112333 = r112331 * r112332;
double r112334 = r112303 / r112333;
double r112335 = pow(r112297, r112322);
double r112336 = r112324 * r112335;
double r112337 = pow(r112297, r112309);
double r112338 = r112328 * r112337;
double r112339 = r112296 * r112297;
double r112340 = fma(r112326, r112338, r112339);
double r112341 = fma(r112321, r112336, r112340);
double r112342 = r112306 * r112341;
double r112343 = r112303 / r112342;
double r112344 = r112320 ? r112334 : r112343;
double r112345 = r112295 ? r112318 : r112344;
return r112345;
}




Bits error versus a




Bits error versus b




Bits error versus eps
| Original | 60.3 |
|---|---|
| Target | 14.7 |
| Herbie | 54.0 |
if a < -1.0320051143206996e+110Initial program 51.9
rmApplied flip--55.2
Simplified55.3
if -1.0320051143206996e+110 < a < 1.6045903834141747e+73Initial program 63.2
Taylor expanded around 0 55.8
Simplified55.8
if 1.6045903834141747e+73 < a Initial program 54.6
Taylor expanded around 0 45.5
Simplified45.5
Final simplification54.0
herbie shell --seed 2019344 +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))))