\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -1.901646128522259257495615629314967561602 \cdot 10^{-252} \lor \neg \left(y \le 1.444583585396195924054622508482627471757 \cdot 10^{-125}\right):\\
\;\;\;\;\left(x \cdot \frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}\right) \cdot \frac{\sqrt[3]{y - z}}{\sqrt[3]{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y + x \cdot \left(-z\right)}{y}\\
\end{array}double f(double x, double y, double z) {
double r870599 = x;
double r870600 = y;
double r870601 = z;
double r870602 = r870600 - r870601;
double r870603 = r870599 * r870602;
double r870604 = r870603 / r870600;
return r870604;
}
double f(double x, double y, double z) {
double r870605 = y;
double r870606 = -1.9016461285222593e-252;
bool r870607 = r870605 <= r870606;
double r870608 = 1.444583585396196e-125;
bool r870609 = r870605 <= r870608;
double r870610 = !r870609;
bool r870611 = r870607 || r870610;
double r870612 = x;
double r870613 = z;
double r870614 = r870605 - r870613;
double r870615 = cbrt(r870614);
double r870616 = r870615 * r870615;
double r870617 = cbrt(r870605);
double r870618 = r870617 * r870617;
double r870619 = r870616 / r870618;
double r870620 = r870612 * r870619;
double r870621 = r870615 / r870617;
double r870622 = r870620 * r870621;
double r870623 = r870612 * r870605;
double r870624 = -r870613;
double r870625 = r870612 * r870624;
double r870626 = r870623 + r870625;
double r870627 = r870626 / r870605;
double r870628 = r870611 ? r870622 : r870627;
return r870628;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 13.0 |
|---|---|
| Target | 3.4 |
| Herbie | 1.9 |
if y < -1.9016461285222593e-252 or 1.444583585396196e-125 < y Initial program 13.4
rmApplied *-un-lft-identity13.4
Applied times-frac1.8
Simplified1.8
rmApplied add-cube-cbrt3.1
Applied add-cube-cbrt2.3
Applied times-frac2.3
Applied associate-*r*0.7
if -1.9016461285222593e-252 < y < 1.444583585396196e-125Initial program 10.0
rmApplied sub-neg10.0
Applied distribute-lft-in10.0
Final simplification1.9
herbie shell --seed 2019353 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
:herbie-target
(if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))