\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}\;b \le -2.4915457606612688 \cdot 10^{+266}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right)}{\left(e^{\varepsilon \cdot a} - 1\right) \cdot \frac{{\left(e^{\varepsilon \cdot b}\right)}^{3} - 1}{e^{\varepsilon \cdot b} \cdot e^{\varepsilon \cdot b} + \left(1 + e^{\varepsilon \cdot b}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\end{array}double f(double a, double b, double eps) {
double r13205053 = eps;
double r13205054 = a;
double r13205055 = b;
double r13205056 = r13205054 + r13205055;
double r13205057 = r13205056 * r13205053;
double r13205058 = exp(r13205057);
double r13205059 = 1.0;
double r13205060 = r13205058 - r13205059;
double r13205061 = r13205053 * r13205060;
double r13205062 = r13205054 * r13205053;
double r13205063 = exp(r13205062);
double r13205064 = r13205063 - r13205059;
double r13205065 = r13205055 * r13205053;
double r13205066 = exp(r13205065);
double r13205067 = r13205066 - r13205059;
double r13205068 = r13205064 * r13205067;
double r13205069 = r13205061 / r13205068;
return r13205069;
}
double f(double a, double b, double eps) {
double r13205070 = b;
double r13205071 = -2.4915457606612688e+266;
bool r13205072 = r13205070 <= r13205071;
double r13205073 = eps;
double r13205074 = a;
double r13205075 = r13205070 + r13205074;
double r13205076 = r13205073 * r13205075;
double r13205077 = exp(r13205076);
double r13205078 = 1.0;
double r13205079 = r13205077 - r13205078;
double r13205080 = r13205073 * r13205079;
double r13205081 = r13205073 * r13205074;
double r13205082 = exp(r13205081);
double r13205083 = r13205082 - r13205078;
double r13205084 = r13205073 * r13205070;
double r13205085 = exp(r13205084);
double r13205086 = 3.0;
double r13205087 = pow(r13205085, r13205086);
double r13205088 = r13205087 - r13205078;
double r13205089 = r13205085 * r13205085;
double r13205090 = r13205078 + r13205085;
double r13205091 = r13205089 + r13205090;
double r13205092 = r13205088 / r13205091;
double r13205093 = r13205083 * r13205092;
double r13205094 = r13205080 / r13205093;
double r13205095 = r13205078 / r13205070;
double r13205096 = r13205078 / r13205074;
double r13205097 = r13205095 + r13205096;
double r13205098 = r13205072 ? r13205094 : r13205097;
return r13205098;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.7 |
|---|---|
| Target | 14.5 |
| Herbie | 4.0 |
if b < -2.4915457606612688e+266Initial program 45.1
rmApplied flip3--45.4
if -2.4915457606612688e+266 < b Initial program 59.0
Taylor expanded around 0 57.2
Simplified56.3
Taylor expanded around 0 3.0
Final simplification4.0
herbie shell --seed 2019104
(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))))