\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 -2140545190609.43994140625:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \left(\varepsilon \cdot b + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \frac{1}{2} + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \frac{1}{6}\right)\right) \cdot b\right) \cdot \left(b \cdot b\right)\right)}\\
\mathbf{elif}\;a \le 4.193348522494585601349604551032648379491 \cdot 10^{103}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\varepsilon \cdot \left(\left(\frac{1}{2} \cdot \left(a \cdot a\right) + \frac{1}{6} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(a \cdot a\right)\right)\right) \cdot \varepsilon\right) + \varepsilon \cdot a\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \left(\varepsilon \cdot b + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \frac{1}{2} + \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \frac{1}{6}\right)\right) \cdot b\right) \cdot \left(b \cdot b\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r6007415 = eps;
double r6007416 = a;
double r6007417 = b;
double r6007418 = r6007416 + r6007417;
double r6007419 = r6007418 * r6007415;
double r6007420 = exp(r6007419);
double r6007421 = 1.0;
double r6007422 = r6007420 - r6007421;
double r6007423 = r6007415 * r6007422;
double r6007424 = r6007416 * r6007415;
double r6007425 = exp(r6007424);
double r6007426 = r6007425 - r6007421;
double r6007427 = r6007417 * r6007415;
double r6007428 = exp(r6007427);
double r6007429 = r6007428 - r6007421;
double r6007430 = r6007426 * r6007429;
double r6007431 = r6007423 / r6007430;
return r6007431;
}
double f(double a, double b, double eps) {
double r6007432 = a;
double r6007433 = -2140545190609.44;
bool r6007434 = r6007432 <= r6007433;
double r6007435 = eps;
double r6007436 = b;
double r6007437 = r6007432 + r6007436;
double r6007438 = r6007435 * r6007437;
double r6007439 = exp(r6007438);
double r6007440 = 1.0;
double r6007441 = r6007439 - r6007440;
double r6007442 = r6007435 * r6007441;
double r6007443 = r6007435 * r6007432;
double r6007444 = exp(r6007443);
double r6007445 = r6007444 - r6007440;
double r6007446 = r6007435 * r6007436;
double r6007447 = r6007435 * r6007435;
double r6007448 = 0.5;
double r6007449 = r6007447 * r6007448;
double r6007450 = 0.16666666666666666;
double r6007451 = r6007435 * r6007450;
double r6007452 = r6007447 * r6007451;
double r6007453 = r6007452 * r6007436;
double r6007454 = r6007449 + r6007453;
double r6007455 = r6007436 * r6007436;
double r6007456 = r6007454 * r6007455;
double r6007457 = r6007446 + r6007456;
double r6007458 = r6007445 * r6007457;
double r6007459 = r6007442 / r6007458;
double r6007460 = 4.1933485224945856e+103;
bool r6007461 = r6007432 <= r6007460;
double r6007462 = exp(r6007446);
double r6007463 = r6007462 - r6007440;
double r6007464 = r6007432 * r6007432;
double r6007465 = r6007448 * r6007464;
double r6007466 = r6007443 * r6007464;
double r6007467 = r6007450 * r6007466;
double r6007468 = r6007465 + r6007467;
double r6007469 = r6007468 * r6007435;
double r6007470 = r6007435 * r6007469;
double r6007471 = r6007470 + r6007443;
double r6007472 = r6007463 * r6007471;
double r6007473 = r6007442 / r6007472;
double r6007474 = r6007461 ? r6007473 : r6007459;
double r6007475 = r6007434 ? r6007459 : r6007474;
return r6007475;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.0 |
|---|---|
| Target | 15.2 |
| Herbie | 52.9 |
if a < -2140545190609.44 or 4.1933485224945856e+103 < a Initial program 53.6
Taylor expanded around 0 48.5
Simplified46.2
if -2140545190609.44 < a < 4.1933485224945856e+103Initial program 63.3
Taylor expanded around 0 56.4
Simplified56.4
rmApplied associate-*l*56.4
Taylor expanded around 0 56.4
Simplified56.4
Final simplification52.9
herbie shell --seed 2019169
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
:pre (and (< -1.0 eps) (< eps 1.0))
:herbie-target
(/ (+ a b) (* a b))
(/ (* eps (- (exp (* (+ a b) eps)) 1.0)) (* (- (exp (* a eps)) 1.0) (- (exp (* b eps)) 1.0))))