\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.3194785649155656 \cdot 10^{26} \lor \neg \left(a \le 6.5664357011814966 \cdot 10^{46}\right):\\
\;\;\;\;\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}, \left({\varepsilon}^{3} \cdot \left(b \cdot b\right)\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\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 r104531 = eps;
double r104532 = a;
double r104533 = b;
double r104534 = r104532 + r104533;
double r104535 = r104534 * r104531;
double r104536 = exp(r104535);
double r104537 = 1.0;
double r104538 = r104536 - r104537;
double r104539 = r104531 * r104538;
double r104540 = r104532 * r104531;
double r104541 = exp(r104540);
double r104542 = r104541 - r104537;
double r104543 = r104533 * r104531;
double r104544 = exp(r104543);
double r104545 = r104544 - r104537;
double r104546 = r104542 * r104545;
double r104547 = r104539 / r104546;
return r104547;
}
double f(double a, double b, double eps) {
double r104548 = a;
double r104549 = -2.3194785649155656e+26;
bool r104550 = r104548 <= r104549;
double r104551 = 6.566435701181497e+46;
bool r104552 = r104548 <= r104551;
double r104553 = !r104552;
bool r104554 = r104550 || r104553;
double r104555 = eps;
double r104556 = b;
double r104557 = r104548 + r104556;
double r104558 = r104557 * r104555;
double r104559 = exp(r104558);
double r104560 = 1.0;
double r104561 = r104559 - r104560;
double r104562 = r104555 * r104561;
double r104563 = r104548 * r104555;
double r104564 = exp(r104563);
double r104565 = r104564 - r104560;
double r104566 = 0.16666666666666666;
double r104567 = 3.0;
double r104568 = pow(r104555, r104567);
double r104569 = r104556 * r104556;
double r104570 = r104568 * r104569;
double r104571 = cbrt(r104556);
double r104572 = pow(r104571, r104567);
double r104573 = r104570 * r104572;
double r104574 = 0.5;
double r104575 = 2.0;
double r104576 = pow(r104555, r104575);
double r104577 = pow(r104556, r104575);
double r104578 = r104576 * r104577;
double r104579 = r104556 * r104555;
double r104580 = fma(r104574, r104578, r104579);
double r104581 = fma(r104566, r104573, r104580);
double r104582 = r104565 * r104581;
double r104583 = r104562 / r104582;
double r104584 = pow(r104548, r104567);
double r104585 = r104584 * r104568;
double r104586 = pow(r104548, r104575);
double r104587 = r104586 * r104576;
double r104588 = fma(r104574, r104587, r104563);
double r104589 = fma(r104566, r104585, r104588);
double r104590 = exp(r104579);
double r104591 = r104590 - r104560;
double r104592 = r104589 * r104591;
double r104593 = r104562 / r104592;
double r104594 = r104554 ? r104583 : r104593;
return r104594;
}




Bits error versus a




Bits error versus b




Bits error versus eps
| Original | 60.4 |
|---|---|
| Target | 15.1 |
| Herbie | 53.4 |
if a < -2.3194785649155656e+26 or 6.566435701181497e+46 < a Initial program 54.7
Taylor expanded around 0 49.1
Simplified49.1
rmApplied add-cube-cbrt49.1
Applied unpow-prod-down49.1
Applied associate-*r*48.3
Simplified48.3
if -2.3194785649155656e+26 < a < 6.566435701181497e+46Initial program 63.8
Taylor expanded around 0 56.5
Simplified56.5
Final simplification53.4
herbie shell --seed 2020047 +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))))