\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 -4.923527264493171 \cdot 10^{+136}:\\
\;\;\;\;\frac{\mathsf{expm1}\left(\left(a + b\right) \cdot \varepsilon\right) \cdot \frac{\varepsilon}{\mathsf{expm1}\left(a \cdot \varepsilon\right)}}{\mathsf{expm1}\left(\varepsilon \cdot b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\
\end{array}double f(double a, double b, double eps) {
double r3548235 = eps;
double r3548236 = a;
double r3548237 = b;
double r3548238 = r3548236 + r3548237;
double r3548239 = r3548238 * r3548235;
double r3548240 = exp(r3548239);
double r3548241 = 1.0;
double r3548242 = r3548240 - r3548241;
double r3548243 = r3548235 * r3548242;
double r3548244 = r3548236 * r3548235;
double r3548245 = exp(r3548244);
double r3548246 = r3548245 - r3548241;
double r3548247 = r3548237 * r3548235;
double r3548248 = exp(r3548247);
double r3548249 = r3548248 - r3548241;
double r3548250 = r3548246 * r3548249;
double r3548251 = r3548243 / r3548250;
return r3548251;
}
double f(double a, double b, double eps) {
double r3548252 = b;
double r3548253 = -4.923527264493171e+136;
bool r3548254 = r3548252 <= r3548253;
double r3548255 = a;
double r3548256 = r3548255 + r3548252;
double r3548257 = eps;
double r3548258 = r3548256 * r3548257;
double r3548259 = expm1(r3548258);
double r3548260 = r3548255 * r3548257;
double r3548261 = expm1(r3548260);
double r3548262 = r3548257 / r3548261;
double r3548263 = r3548259 * r3548262;
double r3548264 = r3548257 * r3548252;
double r3548265 = expm1(r3548264);
double r3548266 = r3548263 / r3548265;
double r3548267 = 1.0;
double r3548268 = r3548267 / r3548252;
double r3548269 = r3548267 / r3548255;
double r3548270 = r3548268 + r3548269;
double r3548271 = r3548254 ? r3548266 : r3548270;
return r3548271;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.5 |
|---|---|
| Target | 13.9 |
| Herbie | 4.0 |
if b < -4.923527264493171e+136Initial program 49.6
Simplified17.2
rmApplied associate-*l/17.2
if -4.923527264493171e+136 < b Initial program 59.6
Simplified29.0
Taylor expanded around 0 2.4
Final simplification4.0
herbie shell --seed 2019138 +o rules:numerics
(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))))