\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}\;t \le -3.1141079314986784 \cdot 10^{-44}:\\
\;\;\;\;\left(t \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(\sqrt[3]{\left(j \cdot 27\right) \cdot k} \cdot \sqrt[3]{\left(j \cdot 27\right) \cdot k}\right) \cdot \sqrt[3]{\left(j \cdot 27\right) \cdot k}\right)\\
\mathbf{elif}\;t \le 1.1312232233938015 \cdot 10^{-68}:\\
\;\;\;\;\left(t \cdot \left(-a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \left(\left(x \cdot \left(y \cdot 18\right)\right) \cdot z - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \cdot k\right)\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 r732534 = x;
double r732535 = 18.0;
double r732536 = r732534 * r732535;
double r732537 = y;
double r732538 = r732536 * r732537;
double r732539 = z;
double r732540 = r732538 * r732539;
double r732541 = t;
double r732542 = r732540 * r732541;
double r732543 = a;
double r732544 = 4.0;
double r732545 = r732543 * r732544;
double r732546 = r732545 * r732541;
double r732547 = r732542 - r732546;
double r732548 = b;
double r732549 = c;
double r732550 = r732548 * r732549;
double r732551 = r732547 + r732550;
double r732552 = r732534 * r732544;
double r732553 = i;
double r732554 = r732552 * r732553;
double r732555 = r732551 - r732554;
double r732556 = j;
double r732557 = 27.0;
double r732558 = r732556 * r732557;
double r732559 = k;
double r732560 = r732558 * r732559;
double r732561 = r732555 - r732560;
return r732561;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r732562 = t;
double r732563 = -3.1141079314986784e-44;
bool r732564 = r732562 <= r732563;
double r732565 = x;
double r732566 = 18.0;
double r732567 = r732565 * r732566;
double r732568 = y;
double r732569 = r732567 * r732568;
double r732570 = z;
double r732571 = r732569 * r732570;
double r732572 = a;
double r732573 = 4.0;
double r732574 = r732572 * r732573;
double r732575 = r732571 - r732574;
double r732576 = r732562 * r732575;
double r732577 = b;
double r732578 = c;
double r732579 = r732577 * r732578;
double r732580 = r732576 + r732579;
double r732581 = r732565 * r732573;
double r732582 = i;
double r732583 = r732581 * r732582;
double r732584 = j;
double r732585 = 27.0;
double r732586 = r732584 * r732585;
double r732587 = k;
double r732588 = r732586 * r732587;
double r732589 = cbrt(r732588);
double r732590 = r732589 * r732589;
double r732591 = r732590 * r732589;
double r732592 = r732583 + r732591;
double r732593 = r732580 - r732592;
double r732594 = 1.1312232233938015e-68;
bool r732595 = r732562 <= r732594;
double r732596 = -r732574;
double r732597 = r732562 * r732596;
double r732598 = r732597 + r732579;
double r732599 = r732583 + r732588;
double r732600 = r732598 - r732599;
double r732601 = r732568 * r732566;
double r732602 = r732565 * r732601;
double r732603 = r732602 * r732570;
double r732604 = r732603 - r732574;
double r732605 = r732562 * r732604;
double r732606 = r732605 + r732579;
double r732607 = r732585 * r732587;
double r732608 = r732584 * r732607;
double r732609 = r732583 + r732608;
double r732610 = r732606 - r732609;
double r732611 = r732595 ? r732600 : r732610;
double r732612 = r732564 ? r732593 : r732611;
return r732612;
}




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.5 |
| Herbie | 4.7 |
if t < -3.1141079314986784e-44Initial program 2.0
Simplified2.0
rmApplied add-cube-cbrt2.2
if -3.1141079314986784e-44 < t < 1.1312232233938015e-68Initial program 8.7
Simplified8.7
Taylor expanded around 0 6.8
if 1.1312232233938015e-68 < t Initial program 2.4
Simplified2.4
rmApplied associate-*l*2.4
rmApplied associate-*l*2.4
Simplified2.4
Final simplification4.7
herbie shell --seed 2020045
(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)))