\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 -7.5412878197323673 \cdot 10^{174}:\\
\;\;\;\;\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) + \left(\frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot {b}^{2}\right) + \varepsilon \cdot b\right)\right)}\\
\mathbf{elif}\;a \le 2.34108127479914129 \cdot 10^{62}:\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(\frac{1}{6} \cdot \left({a}^{3} \cdot {\varepsilon}^{3}\right) + \left(\frac{1}{2} \cdot \left({a}^{2} \cdot {\varepsilon}^{2}\right) + a \cdot \varepsilon\right)\right) \cdot \sqrt[3]{{\left(e^{\varepsilon \cdot b} - 1\right)}^{3}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\left(-1 \cdot 1\right) + {\left(e^{a}\right)}^{\left(2 \cdot \varepsilon\right)}}{e^{a \cdot \varepsilon} + 1} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r115773 = eps;
double r115774 = a;
double r115775 = b;
double r115776 = r115774 + r115775;
double r115777 = r115776 * r115773;
double r115778 = exp(r115777);
double r115779 = 1.0;
double r115780 = r115778 - r115779;
double r115781 = r115773 * r115780;
double r115782 = r115774 * r115773;
double r115783 = exp(r115782);
double r115784 = r115783 - r115779;
double r115785 = r115775 * r115773;
double r115786 = exp(r115785);
double r115787 = r115786 - r115779;
double r115788 = r115784 * r115787;
double r115789 = r115781 / r115788;
return r115789;
}
double f(double a, double b, double eps) {
double r115790 = a;
double r115791 = -7.541287819732367e+174;
bool r115792 = r115790 <= r115791;
double r115793 = eps;
double r115794 = b;
double r115795 = r115790 + r115794;
double r115796 = r115795 * r115793;
double r115797 = exp(r115796);
double r115798 = 1.0;
double r115799 = r115797 - r115798;
double r115800 = r115793 * r115799;
double r115801 = r115790 * r115793;
double r115802 = exp(r115801);
double r115803 = r115802 - r115798;
double r115804 = 0.16666666666666666;
double r115805 = 3.0;
double r115806 = pow(r115793, r115805);
double r115807 = pow(r115794, r115805);
double r115808 = r115806 * r115807;
double r115809 = r115804 * r115808;
double r115810 = 0.5;
double r115811 = 2.0;
double r115812 = pow(r115793, r115811);
double r115813 = pow(r115794, r115811);
double r115814 = r115812 * r115813;
double r115815 = r115810 * r115814;
double r115816 = r115793 * r115794;
double r115817 = r115815 + r115816;
double r115818 = r115809 + r115817;
double r115819 = r115803 * r115818;
double r115820 = r115800 / r115819;
double r115821 = 2.3410812747991413e+62;
bool r115822 = r115790 <= r115821;
double r115823 = pow(r115799, r115805);
double r115824 = cbrt(r115823);
double r115825 = r115793 * r115824;
double r115826 = pow(r115790, r115805);
double r115827 = r115826 * r115806;
double r115828 = r115804 * r115827;
double r115829 = pow(r115790, r115811);
double r115830 = r115829 * r115812;
double r115831 = r115810 * r115830;
double r115832 = r115831 + r115801;
double r115833 = r115828 + r115832;
double r115834 = exp(r115816);
double r115835 = r115834 - r115798;
double r115836 = pow(r115835, r115805);
double r115837 = cbrt(r115836);
double r115838 = r115833 * r115837;
double r115839 = r115825 / r115838;
double r115840 = r115798 * r115798;
double r115841 = -r115840;
double r115842 = exp(r115790);
double r115843 = r115811 * r115793;
double r115844 = pow(r115842, r115843);
double r115845 = r115841 + r115844;
double r115846 = r115802 + r115798;
double r115847 = r115845 / r115846;
double r115848 = r115794 * r115793;
double r115849 = exp(r115848);
double r115850 = r115849 - r115798;
double r115851 = r115847 * r115850;
double r115852 = r115800 / r115851;
double r115853 = r115822 ? r115839 : r115852;
double r115854 = r115792 ? r115820 : r115853;
return r115854;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.5 |
|---|---|
| Target | 14.9 |
| Herbie | 55.2 |
if a < -7.541287819732367e+174Initial program 50.7
Taylor expanded around 0 40.1
if -7.541287819732367e+174 < a < 2.3410812747991413e+62Initial program 62.9
Taylor expanded around 0 56.5
rmApplied add-cbrt-cube56.5
Simplified56.5
rmApplied add-cbrt-cube56.5
Simplified56.5
if 2.3410812747991413e+62 < a Initial program 54.2
rmApplied flip--56.6
Simplified56.6
Final simplification55.2
herbie shell --seed 2020083
(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))))