1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -9.186493886184318 \cdot 10^{36} \lor \neg \left(y \le 165453570.87693185\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{y} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x - 1}{y + 1}, y, 1\right)\\
\end{array}double f(double x, double y) {
double r451289 = 1.0;
double r451290 = x;
double r451291 = r451289 - r451290;
double r451292 = y;
double r451293 = r451291 * r451292;
double r451294 = r451292 + r451289;
double r451295 = r451293 / r451294;
double r451296 = r451289 - r451295;
return r451296;
}
double f(double x, double y) {
double r451297 = y;
double r451298 = -9.186493886184318e+36;
bool r451299 = r451297 <= r451298;
double r451300 = 165453570.87693185;
bool r451301 = r451297 <= r451300;
double r451302 = !r451301;
bool r451303 = r451299 || r451302;
double r451304 = 1.0;
double r451305 = 1.0;
double r451306 = r451305 / r451297;
double r451307 = x;
double r451308 = r451307 / r451297;
double r451309 = r451306 - r451308;
double r451310 = fma(r451304, r451309, r451307);
double r451311 = r451307 - r451304;
double r451312 = r451297 + r451304;
double r451313 = r451311 / r451312;
double r451314 = fma(r451313, r451297, r451304);
double r451315 = r451303 ? r451310 : r451314;
return r451315;
}




Bits error versus x




Bits error versus y
| Original | 22.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.9 |
if y < -9.186493886184318e+36 or 165453570.87693185 < y Initial program 46.6
Simplified29.5
Taylor expanded around inf 0.1
Simplified0.1
if -9.186493886184318e+36 < y < 165453570.87693185Initial program 1.7
Simplified1.6
Final simplification0.9
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1.0 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))) (- (/ 1.0 y) (- (/ x y) x))))
(- 1.0 (/ (* (- 1.0 x) y) (+ y 1.0))))