\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.0320051143206995951819976248147559254 \cdot 10^{110}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \frac{\left(-1 \cdot 1\right) + {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}}{e^{b \cdot \varepsilon} + 1}}\\
\mathbf{elif}\;a \le 1.604590383414174745639109777851955666043 \cdot 10^{73}:\\
\;\;\;\;\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)}\\
\mathbf{else}:\\
\;\;\;\;\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)}\\
\end{array}double f(double a, double b, double eps) {
double r107039 = eps;
double r107040 = a;
double r107041 = b;
double r107042 = r107040 + r107041;
double r107043 = r107042 * r107039;
double r107044 = exp(r107043);
double r107045 = 1.0;
double r107046 = r107044 - r107045;
double r107047 = r107039 * r107046;
double r107048 = r107040 * r107039;
double r107049 = exp(r107048);
double r107050 = r107049 - r107045;
double r107051 = r107041 * r107039;
double r107052 = exp(r107051);
double r107053 = r107052 - r107045;
double r107054 = r107050 * r107053;
double r107055 = r107047 / r107054;
return r107055;
}
double f(double a, double b, double eps) {
double r107056 = a;
double r107057 = -1.0320051143206996e+110;
bool r107058 = r107056 <= r107057;
double r107059 = eps;
double r107060 = b;
double r107061 = r107056 + r107060;
double r107062 = r107061 * r107059;
double r107063 = exp(r107062);
double r107064 = 1.0;
double r107065 = r107063 - r107064;
double r107066 = r107059 * r107065;
double r107067 = r107056 * r107059;
double r107068 = exp(r107067);
double r107069 = r107068 - r107064;
double r107070 = r107064 * r107064;
double r107071 = -r107070;
double r107072 = exp(r107060);
double r107073 = 2.0;
double r107074 = r107073 * r107059;
double r107075 = pow(r107072, r107074);
double r107076 = r107071 + r107075;
double r107077 = r107060 * r107059;
double r107078 = exp(r107077);
double r107079 = r107078 + r107064;
double r107080 = r107076 / r107079;
double r107081 = r107069 * r107080;
double r107082 = r107066 / r107081;
double r107083 = 1.6045903834141747e+73;
bool r107084 = r107056 <= r107083;
double r107085 = 0.16666666666666666;
double r107086 = 3.0;
double r107087 = pow(r107056, r107086);
double r107088 = pow(r107059, r107086);
double r107089 = r107087 * r107088;
double r107090 = r107085 * r107089;
double r107091 = 0.5;
double r107092 = pow(r107056, r107073);
double r107093 = pow(r107059, r107073);
double r107094 = r107092 * r107093;
double r107095 = r107091 * r107094;
double r107096 = r107095 + r107067;
double r107097 = r107090 + r107096;
double r107098 = r107078 - r107064;
double r107099 = r107097 * r107098;
double r107100 = r107066 / r107099;
double r107101 = pow(r107060, r107086);
double r107102 = r107088 * r107101;
double r107103 = r107085 * r107102;
double r107104 = pow(r107060, r107073);
double r107105 = r107093 * r107104;
double r107106 = r107091 * r107105;
double r107107 = r107059 * r107060;
double r107108 = r107106 + r107107;
double r107109 = r107103 + r107108;
double r107110 = r107069 * r107109;
double r107111 = r107066 / r107110;
double r107112 = r107084 ? r107100 : r107111;
double r107113 = r107058 ? r107082 : r107112;
return r107113;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.3 |
|---|---|
| Target | 14.7 |
| Herbie | 54.0 |
if a < -1.0320051143206996e+110Initial program 51.9
rmApplied flip--55.2
Simplified55.3
if -1.0320051143206996e+110 < a < 1.6045903834141747e+73Initial program 63.2
Taylor expanded around 0 55.8
if 1.6045903834141747e+73 < a Initial program 54.6
Taylor expanded around 0 45.5
Final simplification54.0
herbie shell --seed 2019344
(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))))