\frac{\left(x \cdot y\right) \cdot z}{\sqrt{z \cdot z - t \cdot a}}\begin{array}{l}
\mathbf{if}\;z \le -2.099203142812841057267611063629875049796 \cdot 10^{122}:\\
\;\;\;\;\left(-x\right) \cdot y\\
\mathbf{elif}\;z \le 8.801249261765559740247641081984816423417 \cdot 10^{98}:\\
\;\;\;\;\frac{\sqrt[3]{z}}{\sqrt{\sqrt[3]{z \cdot z - a \cdot t}}} \cdot \left(y \cdot \left(\frac{\sqrt[3]{z} \cdot \sqrt[3]{z}}{\left|\sqrt[3]{\sqrt{z \cdot z - a \cdot t}} \cdot \sqrt[3]{\sqrt{z \cdot z - a \cdot t}}\right|} \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot y\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r13063601 = x;
double r13063602 = y;
double r13063603 = r13063601 * r13063602;
double r13063604 = z;
double r13063605 = r13063603 * r13063604;
double r13063606 = r13063604 * r13063604;
double r13063607 = t;
double r13063608 = a;
double r13063609 = r13063607 * r13063608;
double r13063610 = r13063606 - r13063609;
double r13063611 = sqrt(r13063610);
double r13063612 = r13063605 / r13063611;
return r13063612;
}
double f(double x, double y, double z, double t, double a) {
double r13063613 = z;
double r13063614 = -2.099203142812841e+122;
bool r13063615 = r13063613 <= r13063614;
double r13063616 = x;
double r13063617 = -r13063616;
double r13063618 = y;
double r13063619 = r13063617 * r13063618;
double r13063620 = 8.80124926176556e+98;
bool r13063621 = r13063613 <= r13063620;
double r13063622 = cbrt(r13063613);
double r13063623 = r13063613 * r13063613;
double r13063624 = a;
double r13063625 = t;
double r13063626 = r13063624 * r13063625;
double r13063627 = r13063623 - r13063626;
double r13063628 = cbrt(r13063627);
double r13063629 = sqrt(r13063628);
double r13063630 = r13063622 / r13063629;
double r13063631 = r13063622 * r13063622;
double r13063632 = sqrt(r13063627);
double r13063633 = cbrt(r13063632);
double r13063634 = r13063633 * r13063633;
double r13063635 = fabs(r13063634);
double r13063636 = r13063631 / r13063635;
double r13063637 = r13063636 * r13063616;
double r13063638 = r13063618 * r13063637;
double r13063639 = r13063630 * r13063638;
double r13063640 = r13063616 * r13063618;
double r13063641 = r13063621 ? r13063639 : r13063640;
double r13063642 = r13063615 ? r13063619 : r13063641;
return r13063642;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.7 |
|---|---|
| Target | 7.6 |
| Herbie | 5.8 |
if z < -2.099203142812841e+122Initial program 48.1
Taylor expanded around -inf 1.6
Simplified1.6
if -2.099203142812841e+122 < z < 8.80124926176556e+98Initial program 11.0
rmApplied *-un-lft-identity11.0
Applied sqrt-prod11.0
Applied times-frac9.6
Simplified9.6
rmApplied add-cube-cbrt10.0
Applied sqrt-prod10.0
Applied add-cube-cbrt10.3
Applied times-frac10.3
Applied associate-*r*9.5
Simplified8.4
rmApplied add-sqr-sqrt8.4
Applied cbrt-prod8.2
if 8.80124926176556e+98 < z Initial program 43.5
Taylor expanded around inf 2.4
Final simplification5.8
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x y z t a)
:name "Statistics.Math.RootFinding:ridders from math-functions-0.1.5.2"
:herbie-target
(if (< z -3.1921305903852764e+46) (- (* y x)) (if (< z 5.976268120920894e+90) (/ (* x z) (/ (sqrt (- (* z z) (* a t))) y)) (* y x)))
(/ (* (* x y) z) (sqrt (- (* z z) (* t a)))))