double f(double a, double b, double eps) {
double r11159636 = eps;
double r11159637 = a;
double r11159638 = b;
double r11159639 = r11159637 + r11159638;
double r11159640 = r11159639 * r11159636;
double r11159641 = exp(r11159640);
double r11159642 = 1.0;
double r11159643 = r11159641 - r11159642;
double r11159644 = r11159636 * r11159643;
double r11159645 = r11159637 * r11159636;
double r11159646 = exp(r11159645);
double r11159647 = r11159646 - r11159642;
double r11159648 = r11159638 * r11159636;
double r11159649 = exp(r11159648);
double r11159650 = r11159649 - r11159642;
double r11159651 = r11159647 * r11159650;
double r11159652 = r11159644 / r11159651;
return r11159652;
}
double f(double a, double b, double eps) {
double r11159653 = a;
double r11159654 = -2.4042236437500614e+35;
bool r11159655 = r11159653 <= r11159654;
double r11159656 = eps;
double r11159657 = b;
double r11159658 = r11159653 + r11159657;
double r11159659 = r11159656 * r11159658;
double r11159660 = exp(r11159659);
double r11159661 = 1.0;
double r11159662 = r11159660 - r11159661;
double r11159663 = r11159656 * r11159662;
double r11159664 = r11159656 * r11159657;
double r11159665 = 0.5;
double r11159666 = r11159664 * r11159664;
double r11159667 = r11159665 * r11159666;
double r11159668 = r11159666 * r11159657;
double r11159669 = r11159656 * r11159668;
double r11159670 = 0.16666666666666666;
double r11159671 = r11159669 * r11159670;
double r11159672 = r11159667 + r11159671;
double r11159673 = r11159664 + r11159672;
double r11159674 = r11159656 * r11159653;
double r11159675 = exp(r11159674);
double r11159676 = r11159675 - r11159661;
double r11159677 = r11159673 * r11159676;
double r11159678 = r11159663 / r11159677;
double r11159679 = 2.601052546150997e+145;
bool r11159680 = r11159653 <= r11159679;
double r11159681 = exp(r11159664);
double r11159682 = r11159681 - r11159661;
double r11159683 = r11159674 * r11159674;
double r11159684 = r11159665 * r11159683;
double r11159685 = r11159653 * r11159670;
double r11159686 = r11159683 * r11159685;
double r11159687 = r11159686 * r11159656;
double r11159688 = r11159687 + r11159674;
double r11159689 = r11159684 + r11159688;
double r11159690 = r11159682 * r11159689;
double r11159691 = r11159663 / r11159690;
double r11159692 = r11159680 ? r11159691 : r11159678;
double r11159693 = r11159655 ? r11159678 : r11159692;
return r11159693;
}
\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.4042236437500614 \cdot 10^{+35}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\mathbf{elif}\;a \le 2.601052546150997 \cdot 10^{+145}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) + \left(\left(\left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) \cdot \left(a \cdot \frac{1}{6}\right)\right) \cdot \varepsilon + \varepsilon \cdot a\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\end{array}



Bits error versus a




Bits error versus b




Bits error versus eps
| Original | 58.6 |
|---|---|
| Target | 14.1 |
| Herbie | 50.8 |
if a < -2.4042236437500614e+35 or 2.601052546150997e+145 < a Initial program 52.6
Taylor expanded around 0 46.6
Simplified42.8
if -2.4042236437500614e+35 < a < 2.601052546150997e+145Initial program 61.2
Taylor expanded around 0 54.2
Simplified54.1
Final simplification50.8
herbie shell --seed 2019102
(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))))