\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.2717341568466444 \cdot 10^{+67}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\left(\varepsilon \cdot b\right) \cdot \frac{1}{2}\right) + \left(\varepsilon \cdot b + \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot \varepsilon\right) \cdot \left(b \cdot \frac{1}{6}\right)\right)\right)}\\
\mathbf{elif}\;a \le 2.481491912265091 \cdot 10^{+151}:\\
\;\;\;\;\frac{\varepsilon \cdot \frac{e^{\varepsilon \cdot \left(a + b\right) + \left(\varepsilon \cdot \left(a + b\right) + \varepsilon \cdot \left(a + b\right)\right)} - 1}{\left(e^{\varepsilon \cdot \left(a + b\right)} \cdot e^{\varepsilon \cdot \left(a + b\right)} + 1\right) + e^{\varepsilon \cdot \left(a + b\right)}}}{\left(\left(\left(\left(a \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right) \cdot \varepsilon\right) \cdot \frac{1}{6} + \left(\varepsilon \cdot a\right) \cdot \left(\left(\varepsilon \cdot a\right) \cdot \frac{1}{2}\right)\right) + \varepsilon \cdot a\right) \cdot \frac{e^{b \cdot \left(\varepsilon + \left(\varepsilon + \varepsilon\right)\right)} + -1}{\left(e^{\varepsilon \cdot b} + e^{\left(\varepsilon + \varepsilon\right) \cdot b}\right) + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\left(\varepsilon \cdot b\right) \cdot \frac{1}{2}\right) + \left(\varepsilon \cdot b + \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot \varepsilon\right) \cdot \left(b \cdot \frac{1}{6}\right)\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r2990645 = eps;
double r2990646 = a;
double r2990647 = b;
double r2990648 = r2990646 + r2990647;
double r2990649 = r2990648 * r2990645;
double r2990650 = exp(r2990649);
double r2990651 = 1.0;
double r2990652 = r2990650 - r2990651;
double r2990653 = r2990645 * r2990652;
double r2990654 = r2990646 * r2990645;
double r2990655 = exp(r2990654);
double r2990656 = r2990655 - r2990651;
double r2990657 = r2990647 * r2990645;
double r2990658 = exp(r2990657);
double r2990659 = r2990658 - r2990651;
double r2990660 = r2990656 * r2990659;
double r2990661 = r2990653 / r2990660;
return r2990661;
}
double f(double a, double b, double eps) {
double r2990662 = a;
double r2990663 = -1.2717341568466444e+67;
bool r2990664 = r2990662 <= r2990663;
double r2990665 = eps;
double r2990666 = b;
double r2990667 = r2990662 + r2990666;
double r2990668 = r2990665 * r2990667;
double r2990669 = exp(r2990668);
double r2990670 = 1.0;
double r2990671 = r2990669 - r2990670;
double r2990672 = r2990665 * r2990671;
double r2990673 = r2990665 * r2990662;
double r2990674 = exp(r2990673);
double r2990675 = r2990674 - r2990670;
double r2990676 = r2990665 * r2990666;
double r2990677 = 0.5;
double r2990678 = r2990676 * r2990677;
double r2990679 = r2990676 * r2990678;
double r2990680 = r2990676 * r2990676;
double r2990681 = r2990680 * r2990665;
double r2990682 = 0.16666666666666666;
double r2990683 = r2990666 * r2990682;
double r2990684 = r2990681 * r2990683;
double r2990685 = r2990676 + r2990684;
double r2990686 = r2990679 + r2990685;
double r2990687 = r2990675 * r2990686;
double r2990688 = r2990672 / r2990687;
double r2990689 = 2.481491912265091e+151;
bool r2990690 = r2990662 <= r2990689;
double r2990691 = r2990668 + r2990668;
double r2990692 = r2990668 + r2990691;
double r2990693 = exp(r2990692);
double r2990694 = r2990693 - r2990670;
double r2990695 = r2990669 * r2990669;
double r2990696 = r2990695 + r2990670;
double r2990697 = r2990696 + r2990669;
double r2990698 = r2990694 / r2990697;
double r2990699 = r2990665 * r2990698;
double r2990700 = r2990673 * r2990673;
double r2990701 = r2990662 * r2990700;
double r2990702 = r2990701 * r2990665;
double r2990703 = r2990702 * r2990682;
double r2990704 = r2990673 * r2990677;
double r2990705 = r2990673 * r2990704;
double r2990706 = r2990703 + r2990705;
double r2990707 = r2990706 + r2990673;
double r2990708 = r2990665 + r2990665;
double r2990709 = r2990665 + r2990708;
double r2990710 = r2990666 * r2990709;
double r2990711 = exp(r2990710);
double r2990712 = -1.0;
double r2990713 = r2990711 + r2990712;
double r2990714 = exp(r2990676);
double r2990715 = r2990708 * r2990666;
double r2990716 = exp(r2990715);
double r2990717 = r2990714 + r2990716;
double r2990718 = r2990717 + r2990670;
double r2990719 = r2990713 / r2990718;
double r2990720 = r2990707 * r2990719;
double r2990721 = r2990699 / r2990720;
double r2990722 = r2990690 ? r2990721 : r2990688;
double r2990723 = r2990664 ? r2990688 : r2990722;
return r2990723;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.7 |
|---|---|
| Target | 13.8 |
| Herbie | 51.0 |
if a < -1.2717341568466444e+67 or 2.481491912265091e+151 < a Initial program 52.3
Taylor expanded around 0 44.9
Simplified41.4
if -1.2717341568466444e+67 < a < 2.481491912265091e+151Initial program 61.0
Taylor expanded around 0 54.6
Simplified54.4
rmApplied flip3--54.7
Simplified54.8
Simplified54.8
rmApplied flip3--54.8
Simplified54.5
Simplified54.5
Final simplification51.0
herbie shell --seed 2019129
(FPCore (a b eps)
:name "expq3 (problem 3.4.2)"
: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))))