\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 -1.517454008360829355032861276615813967562 \cdot 10^{82}:\\
\;\;\;\;\left(\left(b \cdot c + \left(\left(\left(18 \cdot \left(x \cdot y\right)\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right)\right) - \left(x \cdot 4\right) \cdot i\right) - \sqrt{27} \cdot \left(\sqrt{\sqrt{27}} \cdot \left(\left(j \cdot k\right) \cdot \sqrt{\sqrt{27}}\right)\right)\\
\mathbf{elif}\;t \le 1.183794520104849373419752326327607101571 \cdot 10^{-108}:\\
\;\;\;\;\left(\left(b \cdot c + \left(\left(t \cdot z\right) \cdot \left(18 \cdot \left(x \cdot y\right)\right) - \left(a \cdot 4\right) \cdot t\right)\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot k\right) \cdot 27\\
\mathbf{else}:\\
\;\;\;\;t \cdot \left(\left(x \cdot \left(z \cdot 18\right)\right) \cdot y - a \cdot 4\right) - \left(\left(\left(i \cdot x\right) \cdot 4 - b \cdot c\right) + j \cdot \left(k \cdot 27\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 r35630578 = x;
double r35630579 = 18.0;
double r35630580 = r35630578 * r35630579;
double r35630581 = y;
double r35630582 = r35630580 * r35630581;
double r35630583 = z;
double r35630584 = r35630582 * r35630583;
double r35630585 = t;
double r35630586 = r35630584 * r35630585;
double r35630587 = a;
double r35630588 = 4.0;
double r35630589 = r35630587 * r35630588;
double r35630590 = r35630589 * r35630585;
double r35630591 = r35630586 - r35630590;
double r35630592 = b;
double r35630593 = c;
double r35630594 = r35630592 * r35630593;
double r35630595 = r35630591 + r35630594;
double r35630596 = r35630578 * r35630588;
double r35630597 = i;
double r35630598 = r35630596 * r35630597;
double r35630599 = r35630595 - r35630598;
double r35630600 = j;
double r35630601 = 27.0;
double r35630602 = r35630600 * r35630601;
double r35630603 = k;
double r35630604 = r35630602 * r35630603;
double r35630605 = r35630599 - r35630604;
return r35630605;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r35630606 = t;
double r35630607 = -1.5174540083608294e+82;
bool r35630608 = r35630606 <= r35630607;
double r35630609 = b;
double r35630610 = c;
double r35630611 = r35630609 * r35630610;
double r35630612 = 18.0;
double r35630613 = x;
double r35630614 = y;
double r35630615 = r35630613 * r35630614;
double r35630616 = r35630612 * r35630615;
double r35630617 = z;
double r35630618 = r35630616 * r35630617;
double r35630619 = r35630618 * r35630606;
double r35630620 = a;
double r35630621 = 4.0;
double r35630622 = r35630620 * r35630621;
double r35630623 = r35630622 * r35630606;
double r35630624 = r35630619 - r35630623;
double r35630625 = r35630611 + r35630624;
double r35630626 = r35630613 * r35630621;
double r35630627 = i;
double r35630628 = r35630626 * r35630627;
double r35630629 = r35630625 - r35630628;
double r35630630 = 27.0;
double r35630631 = sqrt(r35630630);
double r35630632 = sqrt(r35630631);
double r35630633 = j;
double r35630634 = k;
double r35630635 = r35630633 * r35630634;
double r35630636 = r35630635 * r35630632;
double r35630637 = r35630632 * r35630636;
double r35630638 = r35630631 * r35630637;
double r35630639 = r35630629 - r35630638;
double r35630640 = 1.1837945201048494e-108;
bool r35630641 = r35630606 <= r35630640;
double r35630642 = r35630606 * r35630617;
double r35630643 = r35630642 * r35630616;
double r35630644 = r35630643 - r35630623;
double r35630645 = r35630611 + r35630644;
double r35630646 = r35630645 - r35630628;
double r35630647 = r35630635 * r35630630;
double r35630648 = r35630646 - r35630647;
double r35630649 = r35630617 * r35630612;
double r35630650 = r35630613 * r35630649;
double r35630651 = r35630650 * r35630614;
double r35630652 = r35630651 - r35630622;
double r35630653 = r35630606 * r35630652;
double r35630654 = r35630627 * r35630613;
double r35630655 = r35630654 * r35630621;
double r35630656 = r35630655 - r35630611;
double r35630657 = r35630634 * r35630630;
double r35630658 = r35630633 * r35630657;
double r35630659 = r35630656 + r35630658;
double r35630660 = r35630653 - r35630659;
double r35630661 = r35630641 ? r35630648 : r35630660;
double r35630662 = r35630608 ? r35630639 : r35630661;
return r35630662;
}




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.9 |
|---|---|
| Target | 1.6 |
| Herbie | 3.9 |
if t < -1.5174540083608294e+82Initial program 1.5
Taylor expanded around 0 1.4
Taylor expanded around 0 1.4
rmApplied add-sqr-sqrt1.4
Applied associate-*l*1.5
rmApplied add-sqr-sqrt1.5
Applied sqrt-prod1.5
Applied associate-*l*1.5
if -1.5174540083608294e+82 < t < 1.1837945201048494e-108Initial program 8.0
Taylor expanded around 0 8.0
Taylor expanded around 0 7.9
rmApplied associate-*l*4.7
if 1.1837945201048494e-108 < t Initial program 3.3
Simplified3.2
Final simplification3.9
herbie shell --seed 2019174
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18.0 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4.0)) (- (* c b) (* 27.0 (* k j)))) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b)))))
(- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))