\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 -1.8883079266888689 \cdot 10^{67} \lor \neg \left(b \le 1.92355889687172386 \cdot 10^{85}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left({\left(e^{b \cdot \varepsilon}\right)}^{3} - {1}^{3}\right)}{e^{b \cdot \varepsilon} \cdot e^{b \cdot \varepsilon} + \left(1 \cdot 1 + e^{b \cdot \varepsilon} \cdot 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(3 \cdot \left(\varepsilon \cdot b\right) + \frac{9}{2} \cdot \left({\varepsilon}^{3} \cdot {b}^{3} + {\varepsilon}^{2} \cdot {b}^{2}\right)\right)}{e^{b \cdot \varepsilon} \cdot e^{b \cdot \varepsilon} + \left(1 \cdot 1 + e^{b \cdot \varepsilon} \cdot 1\right)}}\\
\end{array}double f(double a, double b, double eps) {
double r86241 = eps;
double r86242 = a;
double r86243 = b;
double r86244 = r86242 + r86243;
double r86245 = r86244 * r86241;
double r86246 = exp(r86245);
double r86247 = 1.0;
double r86248 = r86246 - r86247;
double r86249 = r86241 * r86248;
double r86250 = r86242 * r86241;
double r86251 = exp(r86250);
double r86252 = r86251 - r86247;
double r86253 = r86243 * r86241;
double r86254 = exp(r86253);
double r86255 = r86254 - r86247;
double r86256 = r86252 * r86255;
double r86257 = r86249 / r86256;
return r86257;
}
double f(double a, double b, double eps) {
double r86258 = b;
double r86259 = -1.888307926688869e+67;
bool r86260 = r86258 <= r86259;
double r86261 = 1.923558896871724e+85;
bool r86262 = r86258 <= r86261;
double r86263 = !r86262;
bool r86264 = r86260 || r86263;
double r86265 = eps;
double r86266 = a;
double r86267 = r86266 + r86258;
double r86268 = r86267 * r86265;
double r86269 = exp(r86268);
double r86270 = 1.0;
double r86271 = r86269 - r86270;
double r86272 = r86265 * r86271;
double r86273 = r86266 * r86265;
double r86274 = exp(r86273);
double r86275 = r86274 - r86270;
double r86276 = r86258 * r86265;
double r86277 = exp(r86276);
double r86278 = 3.0;
double r86279 = pow(r86277, r86278);
double r86280 = pow(r86270, r86278);
double r86281 = r86279 - r86280;
double r86282 = r86275 * r86281;
double r86283 = r86277 * r86277;
double r86284 = r86270 * r86270;
double r86285 = r86277 * r86270;
double r86286 = r86284 + r86285;
double r86287 = r86283 + r86286;
double r86288 = r86282 / r86287;
double r86289 = r86272 / r86288;
double r86290 = r86265 * r86258;
double r86291 = r86278 * r86290;
double r86292 = 4.5;
double r86293 = pow(r86265, r86278);
double r86294 = pow(r86258, r86278);
double r86295 = r86293 * r86294;
double r86296 = 2.0;
double r86297 = pow(r86265, r86296);
double r86298 = pow(r86258, r86296);
double r86299 = r86297 * r86298;
double r86300 = r86295 + r86299;
double r86301 = r86292 * r86300;
double r86302 = r86291 + r86301;
double r86303 = r86275 * r86302;
double r86304 = r86303 / r86287;
double r86305 = r86272 / r86304;
double r86306 = r86264 ? r86289 : r86305;
return r86306;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 59.5 |
|---|---|
| Target | 16.7 |
| Herbie | 59.5 |
if b < -1.888307926688869e+67 or 1.923558896871724e+85 < b Initial program 49.0
rmApplied flip3--52.4
Applied associate-*r/52.4
if -1.888307926688869e+67 < b < 1.923558896871724e+85Initial program 63.5
rmApplied flip3--63.6
Applied associate-*r/63.6
Taylor expanded around 0 62.2
Simplified62.2
Final simplification59.5
herbie shell --seed 2020021
(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))))