1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -1041138812298367.38 \lor \neg \left(y \le 7.8750576753944721 \cdot 10^{30}\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(y \cdot \left(\left(\sqrt[3]{\frac{1}{{y}^{3} + {1}^{3}}} \cdot \sqrt[3]{y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)}\right) \cdot \sqrt[3]{\frac{1}{y + 1}}\right)\right) \cdot \sqrt[3]{\frac{1}{y + 1}}, x - 1, 1\right)\\
\end{array}double f(double x, double y) {
double r696390 = 1.0;
double r696391 = x;
double r696392 = r696390 - r696391;
double r696393 = y;
double r696394 = r696392 * r696393;
double r696395 = r696393 + r696390;
double r696396 = r696394 / r696395;
double r696397 = r696390 - r696396;
return r696397;
}
double f(double x, double y) {
double r696398 = y;
double r696399 = -1041138812298367.4;
bool r696400 = r696398 <= r696399;
double r696401 = 7.875057675394472e+30;
bool r696402 = r696398 <= r696401;
double r696403 = !r696402;
bool r696404 = r696400 || r696403;
double r696405 = 1.0;
double r696406 = x;
double r696407 = 2.0;
double r696408 = pow(r696398, r696407);
double r696409 = r696406 / r696408;
double r696410 = r696406 / r696398;
double r696411 = r696409 - r696410;
double r696412 = fma(r696405, r696411, r696406);
double r696413 = 1.0;
double r696414 = 3.0;
double r696415 = pow(r696398, r696414);
double r696416 = pow(r696405, r696414);
double r696417 = r696415 + r696416;
double r696418 = r696413 / r696417;
double r696419 = cbrt(r696418);
double r696420 = r696398 * r696398;
double r696421 = r696405 * r696405;
double r696422 = r696398 * r696405;
double r696423 = r696421 - r696422;
double r696424 = r696420 + r696423;
double r696425 = cbrt(r696424);
double r696426 = r696419 * r696425;
double r696427 = r696398 + r696405;
double r696428 = r696413 / r696427;
double r696429 = cbrt(r696428);
double r696430 = r696426 * r696429;
double r696431 = r696398 * r696430;
double r696432 = r696431 * r696429;
double r696433 = r696406 - r696405;
double r696434 = fma(r696432, r696433, r696405);
double r696435 = r696404 ? r696412 : r696434;
return r696435;
}




Bits error versus x




Bits error versus y
| Original | 21.9 |
|---|---|
| Target | 0.3 |
| Herbie | 7.6 |
if y < -1041138812298367.4 or 7.875057675394472e+30 < y Initial program 46.3
Simplified28.9
rmApplied div-inv29.0
Taylor expanded around inf 14.8
Simplified14.8
if -1041138812298367.4 < y < 7.875057675394472e+30Initial program 1.5
Simplified1.5
rmApplied div-inv1.5
rmApplied add-cube-cbrt1.6
Applied associate-*r*1.6
rmApplied flip3-+1.6
Applied associate-/r/1.6
Applied cbrt-prod1.6
Final simplification7.6
herbie shell --seed 2020064 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:precision binary64
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))