\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 -8.3782938552808126543647984854596196655 \cdot 10^{-183}:\\
\;\;\;\;t \cdot \left(\left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{elif}\;t \le 1.541728241483554882113848793697671960573 \cdot 10^{-174}:\\
\;\;\;\;t \cdot \left(0 - a \cdot 4\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + \left(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right) + \left(b \cdot c - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \cdot k\right)\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 r800561 = x;
double r800562 = 18.0;
double r800563 = r800561 * r800562;
double r800564 = y;
double r800565 = r800563 * r800564;
double r800566 = z;
double r800567 = r800565 * r800566;
double r800568 = t;
double r800569 = r800567 * r800568;
double r800570 = a;
double r800571 = 4.0;
double r800572 = r800570 * r800571;
double r800573 = r800572 * r800568;
double r800574 = r800569 - r800573;
double r800575 = b;
double r800576 = c;
double r800577 = r800575 * r800576;
double r800578 = r800574 + r800577;
double r800579 = r800561 * r800571;
double r800580 = i;
double r800581 = r800579 * r800580;
double r800582 = r800578 - r800581;
double r800583 = j;
double r800584 = 27.0;
double r800585 = r800583 * r800584;
double r800586 = k;
double r800587 = r800585 * r800586;
double r800588 = r800582 - r800587;
return r800588;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r800589 = t;
double r800590 = -8.378293855280813e-183;
bool r800591 = r800589 <= r800590;
double r800592 = x;
double r800593 = 18.0;
double r800594 = r800592 * r800593;
double r800595 = y;
double r800596 = z;
double r800597 = r800595 * r800596;
double r800598 = r800594 * r800597;
double r800599 = a;
double r800600 = 4.0;
double r800601 = r800599 * r800600;
double r800602 = r800598 - r800601;
double r800603 = r800589 * r800602;
double r800604 = b;
double r800605 = c;
double r800606 = r800604 * r800605;
double r800607 = r800592 * r800600;
double r800608 = i;
double r800609 = r800607 * r800608;
double r800610 = j;
double r800611 = 27.0;
double r800612 = r800610 * r800611;
double r800613 = k;
double r800614 = r800612 * r800613;
double r800615 = r800609 + r800614;
double r800616 = r800606 - r800615;
double r800617 = r800603 + r800616;
double r800618 = 1.5417282414835549e-174;
bool r800619 = r800589 <= r800618;
double r800620 = 0.0;
double r800621 = r800620 - r800601;
double r800622 = r800589 * r800621;
double r800623 = cbrt(r800613);
double r800624 = r800623 * r800623;
double r800625 = r800612 * r800624;
double r800626 = r800625 * r800623;
double r800627 = r800609 + r800626;
double r800628 = r800606 - r800627;
double r800629 = r800622 + r800628;
double r800630 = r800594 * r800595;
double r800631 = r800630 * r800596;
double r800632 = r800631 - r800601;
double r800633 = r800589 * r800632;
double r800634 = r800611 * r800613;
double r800635 = r800610 * r800634;
double r800636 = r800609 + r800635;
double r800637 = r800606 - r800636;
double r800638 = r800633 + r800637;
double r800639 = r800619 ? r800629 : r800638;
double r800640 = r800591 ? r800617 : r800639;
return r800640;
}




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.7 |
|---|---|
| Target | 2.0 |
| Herbie | 4.9 |
if t < -8.378293855280813e-183Initial program 4.3
Simplified4.3
rmApplied associate-*l*4.8
if -8.378293855280813e-183 < t < 1.5417282414835549e-174Initial program 9.7
Simplified9.7
rmApplied add-cube-cbrt10.0
Applied associate-*r*10.0
Taylor expanded around 0 6.2
if 1.5417282414835549e-174 < t Initial program 4.0
Simplified4.0
rmApplied associate-*l*4.0
Final simplification4.9
herbie shell --seed 2020001
(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)))