\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;z \le -7.2131406689924034 \cdot 10^{45}:\\
\;\;\;\;\left(\left(\left(t \cdot {\left(\sqrt[3]{\sqrt[3]{z}}\right)}^{3}\right) \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right) + \left(-a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \cdot k\right)\right)\\
\mathbf{elif}\;z \le 1.86064292666481138 \cdot 10^{-39}:\\
\;\;\;\;\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\right)\right) - 4 \cdot \left(a \cdot t\right)\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \cdot k\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \sqrt{z}\right) \cdot \sqrt{z} - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r947440 = x;
double r947441 = 18.0;
double r947442 = r947440 * r947441;
double r947443 = y;
double r947444 = r947442 * r947443;
double r947445 = z;
double r947446 = r947444 * r947445;
double r947447 = t;
double r947448 = r947446 * r947447;
double r947449 = a;
double r947450 = 4.0;
double r947451 = r947449 * r947450;
double r947452 = r947451 * r947447;
double r947453 = r947448 - r947452;
double r947454 = b;
double r947455 = c;
double r947456 = r947454 * r947455;
double r947457 = r947453 + r947456;
double r947458 = r947440 * r947450;
double r947459 = i;
double r947460 = r947458 * r947459;
double r947461 = r947457 - r947460;
double r947462 = j;
double r947463 = 27.0;
double r947464 = r947462 * r947463;
double r947465 = k;
double r947466 = r947464 * r947465;
double r947467 = r947461 - r947466;
return r947467;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r947468 = z;
double r947469 = -7.213140668992403e+45;
bool r947470 = r947468 <= r947469;
double r947471 = t;
double r947472 = cbrt(r947468);
double r947473 = cbrt(r947472);
double r947474 = 3.0;
double r947475 = pow(r947473, r947474);
double r947476 = r947471 * r947475;
double r947477 = x;
double r947478 = 18.0;
double r947479 = r947477 * r947478;
double r947480 = y;
double r947481 = r947479 * r947480;
double r947482 = r947472 * r947472;
double r947483 = r947481 * r947482;
double r947484 = r947476 * r947483;
double r947485 = a;
double r947486 = 4.0;
double r947487 = r947485 * r947486;
double r947488 = -r947487;
double r947489 = r947488 * r947471;
double r947490 = r947484 + r947489;
double r947491 = b;
double r947492 = c;
double r947493 = r947491 * r947492;
double r947494 = r947490 + r947493;
double r947495 = r947477 * r947486;
double r947496 = i;
double r947497 = r947495 * r947496;
double r947498 = j;
double r947499 = 27.0;
double r947500 = k;
double r947501 = r947499 * r947500;
double r947502 = r947498 * r947501;
double r947503 = r947497 + r947502;
double r947504 = r947494 - r947503;
double r947505 = 1.8606429266648114e-39;
bool r947506 = r947468 <= r947505;
double r947507 = r947468 * r947480;
double r947508 = r947477 * r947507;
double r947509 = r947471 * r947508;
double r947510 = r947478 * r947509;
double r947511 = r947485 * r947471;
double r947512 = r947486 * r947511;
double r947513 = r947510 - r947512;
double r947514 = r947513 + r947493;
double r947515 = r947514 - r947503;
double r947516 = sqrt(r947468);
double r947517 = r947481 * r947516;
double r947518 = r947517 * r947516;
double r947519 = r947518 - r947487;
double r947520 = r947471 * r947519;
double r947521 = r947520 + r947493;
double r947522 = r947498 * r947499;
double r947523 = r947522 * r947500;
double r947524 = r947497 + r947523;
double r947525 = r947521 - r947524;
double r947526 = r947506 ? r947515 : r947525;
double r947527 = r947470 ? r947504 : r947526;
return r947527;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus i




Bits error versus j




Bits error versus k
Results
| Original | 5.6 |
|---|---|
| Target | 1.6 |
| Herbie | 3.4 |
if z < -7.213140668992403e+45Initial program 6.6
Simplified6.6
rmApplied associate-*l*6.5
rmApplied add-cube-cbrt6.7
Applied associate-*r*6.7
rmApplied add-cube-cbrt6.8
rmApplied sub-neg6.8
Applied distribute-lft-in6.8
Simplified5.2
Simplified5.2
if -7.213140668992403e+45 < z < 1.8606429266648114e-39Initial program 4.9
Simplified4.9
rmApplied associate-*l*4.8
rmApplied add-cube-cbrt4.8
Applied associate-*r*4.8
rmApplied add-cube-cbrt4.8
Taylor expanded around inf 1.4
if 1.8606429266648114e-39 < z Initial program 6.5
Simplified6.5
rmApplied add-sqr-sqrt6.5
Applied associate-*r*6.5
Final simplification3.4
herbie shell --seed 2020046
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:precision binary64
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))
(- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))