\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 -2.05110049757782854 \cdot 10^{65}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot \left(\left(18 \cdot y\right) \cdot z\right)\right) \cdot t - a \cdot \left(4 \cdot t\right)\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\\
\mathbf{elif}\;t \le 3.21315296623720254 \cdot 10^{-90}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot \left(18 \cdot y\right)\right) \cdot \left(z \cdot t\right) - a \cdot \left(4 \cdot t\right)\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot \left(18 \cdot y\right)\right) \cdot z\right) \cdot t - a \cdot \left(4 \cdot t\right)\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \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 r796648 = x;
double r796649 = 18.0;
double r796650 = r796648 * r796649;
double r796651 = y;
double r796652 = r796650 * r796651;
double r796653 = z;
double r796654 = r796652 * r796653;
double r796655 = t;
double r796656 = r796654 * r796655;
double r796657 = a;
double r796658 = 4.0;
double r796659 = r796657 * r796658;
double r796660 = r796659 * r796655;
double r796661 = r796656 - r796660;
double r796662 = b;
double r796663 = c;
double r796664 = r796662 * r796663;
double r796665 = r796661 + r796664;
double r796666 = r796648 * r796658;
double r796667 = i;
double r796668 = r796666 * r796667;
double r796669 = r796665 - r796668;
double r796670 = j;
double r796671 = 27.0;
double r796672 = r796670 * r796671;
double r796673 = k;
double r796674 = r796672 * r796673;
double r796675 = r796669 - r796674;
return r796675;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r796676 = t;
double r796677 = -2.0511004975778285e+65;
bool r796678 = r796676 <= r796677;
double r796679 = x;
double r796680 = 18.0;
double r796681 = y;
double r796682 = r796680 * r796681;
double r796683 = z;
double r796684 = r796682 * r796683;
double r796685 = r796679 * r796684;
double r796686 = r796685 * r796676;
double r796687 = a;
double r796688 = 4.0;
double r796689 = r796688 * r796676;
double r796690 = r796687 * r796689;
double r796691 = r796686 - r796690;
double r796692 = b;
double r796693 = c;
double r796694 = r796692 * r796693;
double r796695 = r796691 + r796694;
double r796696 = r796679 * r796688;
double r796697 = i;
double r796698 = r796696 * r796697;
double r796699 = r796695 - r796698;
double r796700 = j;
double r796701 = 27.0;
double r796702 = r796700 * r796701;
double r796703 = k;
double r796704 = r796702 * r796703;
double r796705 = r796699 - r796704;
double r796706 = 3.2131529662372025e-90;
bool r796707 = r796676 <= r796706;
double r796708 = r796679 * r796682;
double r796709 = r796683 * r796676;
double r796710 = r796708 * r796709;
double r796711 = r796710 - r796690;
double r796712 = r796711 + r796694;
double r796713 = r796712 - r796698;
double r796714 = r796713 - r796704;
double r796715 = r796708 * r796683;
double r796716 = r796715 * r796676;
double r796717 = r796716 - r796690;
double r796718 = r796717 + r796694;
double r796719 = r796718 - r796698;
double r796720 = r796701 * r796703;
double r796721 = r796700 * r796720;
double r796722 = r796719 - r796721;
double r796723 = r796707 ? r796714 : r796722;
double r796724 = r796678 ? r796705 : r796723;
return r796724;
}




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.1 |
|---|---|
| Target | 1.4 |
| Herbie | 3.5 |
if t < -2.0511004975778285e+65Initial program 1.2
rmApplied associate-*l*1.2
rmApplied associate-*l*1.4
rmApplied associate-*l*1.9
if -2.0511004975778285e+65 < t < 3.2131529662372025e-90Initial program 7.0
rmApplied associate-*l*7.0
rmApplied associate-*l*7.0
rmApplied associate-*l*4.2
if 3.2131529662372025e-90 < t Initial program 2.7
rmApplied associate-*l*2.7
rmApplied associate-*l*2.8
rmApplied associate-*l*2.7
Final simplification3.5
herbie shell --seed 2020060 +o rules:numerics
(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)))