\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.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left(\left({\varepsilon}^{3} \cdot b\right) \cdot \left(b \cdot b\right)\right) + \left(\frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot {b}^{2}\right) + \varepsilon \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({a}^{3} \cdot {\varepsilon}^{3}\right) + \left(\frac{1}{2} \cdot \left({a}^{2} \cdot {\varepsilon}^{2}\right) + a \cdot \varepsilon\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r94993 = eps;
double r94994 = a;
double r94995 = b;
double r94996 = r94994 + r94995;
double r94997 = r94996 * r94993;
double r94998 = exp(r94997);
double r94999 = 1.0;
double r95000 = r94998 - r94999;
double r95001 = r94993 * r95000;
double r95002 = r94994 * r94993;
double r95003 = exp(r95002);
double r95004 = r95003 - r94999;
double r95005 = r94995 * r94993;
double r95006 = exp(r95005);
double r95007 = r95006 - r94999;
double r95008 = r95004 * r95007;
double r95009 = r95001 / r95008;
return r95009;
}
double f(double a, double b, double eps) {
double r95010 = a;
double r95011 = -1.9693375139914443e+72;
bool r95012 = r95010 <= r95011;
double r95013 = 9.716140837926457e+126;
bool r95014 = r95010 <= r95013;
double r95015 = !r95014;
bool r95016 = r95012 || r95015;
double r95017 = eps;
double r95018 = b;
double r95019 = r95010 + r95018;
double r95020 = r95019 * r95017;
double r95021 = exp(r95020);
double r95022 = 1.0;
double r95023 = r95021 - r95022;
double r95024 = 3.0;
double r95025 = pow(r95023, r95024);
double r95026 = cbrt(r95025);
double r95027 = r95017 * r95026;
double r95028 = r95010 * r95017;
double r95029 = exp(r95028);
double r95030 = r95029 - r95022;
double r95031 = 0.16666666666666666;
double r95032 = pow(r95017, r95024);
double r95033 = r95032 * r95018;
double r95034 = r95018 * r95018;
double r95035 = r95033 * r95034;
double r95036 = r95031 * r95035;
double r95037 = 0.5;
double r95038 = 2.0;
double r95039 = pow(r95017, r95038);
double r95040 = pow(r95018, r95038);
double r95041 = r95039 * r95040;
double r95042 = r95037 * r95041;
double r95043 = r95017 * r95018;
double r95044 = r95042 + r95043;
double r95045 = r95036 + r95044;
double r95046 = r95030 * r95045;
double r95047 = r95027 / r95046;
double r95048 = r95017 * r95023;
double r95049 = pow(r95010, r95024);
double r95050 = r95049 * r95032;
double r95051 = r95031 * r95050;
double r95052 = pow(r95010, r95038);
double r95053 = r95052 * r95039;
double r95054 = r95037 * r95053;
double r95055 = r95054 + r95028;
double r95056 = r95051 + r95055;
double r95057 = r95018 * r95017;
double r95058 = exp(r95057);
double r95059 = r95058 - r95022;
double r95060 = r95056 * r95059;
double r95061 = r95048 / r95060;
double r95062 = r95016 ? r95047 : r95061;
return r95062;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.2 |
|---|---|
| Target | 14.9 |
| Herbie | 53.7 |
if a < -1.9693375139914443e+72 or 9.716140837926457e+126 < a Initial program 52.9
Taylor expanded around 0 46.9
rmApplied cube-mult46.9
Applied associate-*r*46.0
rmApplied add-cbrt-cube46.1
Simplified46.1
if -1.9693375139914443e+72 < a < 9.716140837926457e+126Initial program 63.0
Taylor expanded around 0 56.5
Final simplification53.7
herbie shell --seed 2020001
(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))))