\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.036775871972911749699325479966497352254 \cdot 10^{-16}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot z\right)\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\\
\mathbf{elif}\;t \le 1.532489333056134866631301001282850563412 \cdot 10^{-52}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(\left(\sqrt[3]{y \cdot \left(z \cdot t\right)} \cdot \sqrt[3]{y \cdot \left(z \cdot t\right)}\right) \cdot \sqrt[3]{y \cdot \left(z \cdot t\right)}\right) - \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\\
\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 + \left(j \cdot 27\right) \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 r808006 = x;
double r808007 = 18.0;
double r808008 = r808006 * r808007;
double r808009 = y;
double r808010 = r808008 * r808009;
double r808011 = z;
double r808012 = r808010 * r808011;
double r808013 = t;
double r808014 = r808012 * r808013;
double r808015 = a;
double r808016 = 4.0;
double r808017 = r808015 * r808016;
double r808018 = r808017 * r808013;
double r808019 = r808014 - r808018;
double r808020 = b;
double r808021 = c;
double r808022 = r808020 * r808021;
double r808023 = r808019 + r808022;
double r808024 = r808006 * r808016;
double r808025 = i;
double r808026 = r808024 * r808025;
double r808027 = r808023 - r808026;
double r808028 = j;
double r808029 = 27.0;
double r808030 = r808028 * r808029;
double r808031 = k;
double r808032 = r808030 * r808031;
double r808033 = r808027 - r808032;
return r808033;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r808034 = t;
double r808035 = -1.0367758719729117e-16;
bool r808036 = r808034 <= r808035;
double r808037 = x;
double r808038 = 18.0;
double r808039 = r808037 * r808038;
double r808040 = y;
double r808041 = z;
double r808042 = r808040 * r808041;
double r808043 = r808039 * r808042;
double r808044 = r808043 * r808034;
double r808045 = a;
double r808046 = 4.0;
double r808047 = r808045 * r808046;
double r808048 = r808047 * r808034;
double r808049 = r808044 - r808048;
double r808050 = b;
double r808051 = c;
double r808052 = r808050 * r808051;
double r808053 = r808049 + r808052;
double r808054 = r808037 * r808046;
double r808055 = i;
double r808056 = r808054 * r808055;
double r808057 = r808053 - r808056;
double r808058 = j;
double r808059 = 27.0;
double r808060 = r808058 * r808059;
double r808061 = k;
double r808062 = r808060 * r808061;
double r808063 = r808057 - r808062;
double r808064 = 1.5324893330561349e-52;
bool r808065 = r808034 <= r808064;
double r808066 = r808041 * r808034;
double r808067 = r808040 * r808066;
double r808068 = cbrt(r808067);
double r808069 = r808068 * r808068;
double r808070 = r808069 * r808068;
double r808071 = r808039 * r808070;
double r808072 = r808071 - r808048;
double r808073 = r808072 + r808052;
double r808074 = r808073 - r808056;
double r808075 = r808074 - r808062;
double r808076 = r808039 * r808040;
double r808077 = r808076 * r808041;
double r808078 = r808077 - r808047;
double r808079 = r808034 * r808078;
double r808080 = r808056 + r808062;
double r808081 = r808052 - r808080;
double r808082 = r808079 + r808081;
double r808083 = r808065 ? r808075 : r808082;
double r808084 = r808036 ? r808063 : r808083;
return r808084;
}




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.5 |
|---|---|
| Target | 1.6 |
| Herbie | 2.0 |
if t < -1.0367758719729117e-16Initial program 2.4
rmApplied associate-*l*2.7
if -1.0367758719729117e-16 < t < 1.5324893330561349e-52Initial program 8.0
rmApplied associate-*l*4.0
rmApplied associate-*l*1.6
rmApplied add-cube-cbrt1.6
if 1.5324893330561349e-52 < t Initial program 2.1
Simplified2.1
Final simplification2.0
herbie shell --seed 2019322
(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.680279438052224) (+ (- (* (* 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)))