\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.149494606308064458906089789806896623859 \cdot 10^{206}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\sqrt[3]{{\left(\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{a \cdot \varepsilon} - 1\right)\right)}^{3}}}\\
\mathbf{elif}\;a \le -42654372502725921665725083421119241781250 \lor \neg \left(a \le 1.862763256825556893564988492089441740766 \cdot 10^{124}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left({\varepsilon}^{3} \cdot {b}^{3}\right) + b \cdot \left(\varepsilon + \left(\frac{1}{2} \cdot {\varepsilon}^{2}\right) \cdot b\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot {\left(\varepsilon \cdot a\right)}^{3} + \varepsilon \cdot \left(\left(\frac{1}{2} \cdot {a}^{2}\right) \cdot \varepsilon + a\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r82658 = eps;
double r82659 = a;
double r82660 = b;
double r82661 = r82659 + r82660;
double r82662 = r82661 * r82658;
double r82663 = exp(r82662);
double r82664 = 1.0;
double r82665 = r82663 - r82664;
double r82666 = r82658 * r82665;
double r82667 = r82659 * r82658;
double r82668 = exp(r82667);
double r82669 = r82668 - r82664;
double r82670 = r82660 * r82658;
double r82671 = exp(r82670);
double r82672 = r82671 - r82664;
double r82673 = r82669 * r82672;
double r82674 = r82666 / r82673;
return r82674;
}
double f(double a, double b, double eps) {
double r82675 = a;
double r82676 = -2.1494946063080645e+206;
bool r82677 = r82675 <= r82676;
double r82678 = eps;
double r82679 = b;
double r82680 = r82675 + r82679;
double r82681 = r82680 * r82678;
double r82682 = exp(r82681);
double r82683 = 1.0;
double r82684 = r82682 - r82683;
double r82685 = r82678 * r82684;
double r82686 = r82678 * r82679;
double r82687 = exp(r82686);
double r82688 = r82687 - r82683;
double r82689 = r82675 * r82678;
double r82690 = exp(r82689);
double r82691 = r82690 - r82683;
double r82692 = r82688 * r82691;
double r82693 = 3.0;
double r82694 = pow(r82692, r82693);
double r82695 = cbrt(r82694);
double r82696 = r82685 / r82695;
double r82697 = -4.265437250272592e+40;
bool r82698 = r82675 <= r82697;
double r82699 = 1.862763256825557e+124;
bool r82700 = r82675 <= r82699;
double r82701 = !r82700;
bool r82702 = r82698 || r82701;
double r82703 = 0.16666666666666666;
double r82704 = pow(r82678, r82693);
double r82705 = pow(r82679, r82693);
double r82706 = r82704 * r82705;
double r82707 = r82703 * r82706;
double r82708 = 0.5;
double r82709 = 2.0;
double r82710 = pow(r82678, r82709);
double r82711 = r82708 * r82710;
double r82712 = r82711 * r82679;
double r82713 = r82678 + r82712;
double r82714 = r82679 * r82713;
double r82715 = r82707 + r82714;
double r82716 = r82691 * r82715;
double r82717 = r82685 / r82716;
double r82718 = r82678 * r82675;
double r82719 = pow(r82718, r82693);
double r82720 = r82703 * r82719;
double r82721 = pow(r82675, r82709);
double r82722 = r82708 * r82721;
double r82723 = r82722 * r82678;
double r82724 = r82723 + r82675;
double r82725 = r82678 * r82724;
double r82726 = r82720 + r82725;
double r82727 = r82679 * r82678;
double r82728 = exp(r82727);
double r82729 = r82728 - r82683;
double r82730 = r82726 * r82729;
double r82731 = r82685 / r82730;
double r82732 = r82702 ? r82717 : r82731;
double r82733 = r82677 ? r82696 : r82732;
return r82733;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 15.0 |
| Herbie | 54.1 |
if a < -2.1494946063080645e+206Initial program 48.9
rmApplied add-cbrt-cube48.9
Applied add-cbrt-cube48.9
Applied cbrt-unprod48.9
Simplified48.9
if -2.1494946063080645e+206 < a < -4.265437250272592e+40 or 1.862763256825557e+124 < a Initial program 54.6
Taylor expanded around 0 49.4
Simplified48.9
if -4.265437250272592e+40 < a < 1.862763256825557e+124Initial program 63.3
Taylor expanded around 0 56.4
Simplified56.4
rmApplied pow-prod-down56.3
Simplified56.3
Final simplification54.1
herbie shell --seed 2019303
(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))))