1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -9.10910013050573315 \cdot 10^{36} \lor \neg \left(y \le 3.0451068833477929 \cdot 10^{29}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{y}, \frac{1}{y} - 1, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\frac{y}{\sqrt[3]{y + 1} \cdot \frac{\sqrt[3]{y \cdot y - 1 \cdot 1}}{\sqrt[3]{y - 1}}}}{\sqrt[3]{y + 1}}, x - 1, 1\right)\\
\end{array}double f(double x, double y) {
double r632617 = 1.0;
double r632618 = x;
double r632619 = r632617 - r632618;
double r632620 = y;
double r632621 = r632619 * r632620;
double r632622 = r632620 + r632617;
double r632623 = r632621 / r632622;
double r632624 = r632617 - r632623;
return r632624;
}
double f(double x, double y) {
double r632625 = y;
double r632626 = -9.109100130505733e+36;
bool r632627 = r632625 <= r632626;
double r632628 = 3.045106883347793e+29;
bool r632629 = r632625 <= r632628;
double r632630 = !r632629;
bool r632631 = r632627 || r632630;
double r632632 = x;
double r632633 = r632632 / r632625;
double r632634 = 1.0;
double r632635 = r632634 / r632625;
double r632636 = r632635 - r632634;
double r632637 = fma(r632633, r632636, r632632);
double r632638 = r632625 + r632634;
double r632639 = cbrt(r632638);
double r632640 = r632625 * r632625;
double r632641 = r632634 * r632634;
double r632642 = r632640 - r632641;
double r632643 = cbrt(r632642);
double r632644 = r632625 - r632634;
double r632645 = cbrt(r632644);
double r632646 = r632643 / r632645;
double r632647 = r632639 * r632646;
double r632648 = r632625 / r632647;
double r632649 = r632648 / r632639;
double r632650 = r632632 - r632634;
double r632651 = fma(r632649, r632650, r632634);
double r632652 = r632631 ? r632637 : r632651;
return r632652;
}




Bits error versus x




Bits error versus y
| Original | 21.9 |
|---|---|
| Target | 0.2 |
| Herbie | 7.5 |
if y < -9.109100130505733e+36 or 3.045106883347793e+29 < y Initial program 46.8
Simplified29.4
Taylor expanded around inf 14.2
Simplified14.2
if -9.109100130505733e+36 < y < 3.045106883347793e+29Initial program 2.4
Simplified2.2
rmApplied add-cube-cbrt2.3
Applied associate-/r*2.3
rmApplied flip-+2.3
Applied cbrt-div2.3
Final simplification7.5
herbie shell --seed 2020046 +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))))