\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.205203319587854639702496288290674129254 \cdot 10^{-38}:\\
\;\;\;\;\left(\left(\left(z \cdot 18\right) \cdot x\right) \cdot y - a \cdot 4\right) \cdot t - \left(\left(k \cdot 27\right) \cdot j + \left(\left(x \cdot i\right) \cdot 4 - c \cdot b\right)\right)\\
\mathbf{elif}\;t \le 21398956214679056089773245927409728880640:\\
\;\;\;\;\left(\left(\left(\left(18 \cdot \left(y \cdot x\right)\right) \cdot \left(z \cdot t\right) - \left(a \cdot 4\right) \cdot t\right) + c \cdot b\right) - \left(4 \cdot x\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(z \cdot 18\right) \cdot x\right) \cdot y - a \cdot 4\right) \cdot t - \left(\left(k \cdot 27\right) \cdot j + \left(\left(x \cdot i\right) \cdot 4 - c \cdot b\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 r47188924 = x;
double r47188925 = 18.0;
double r47188926 = r47188924 * r47188925;
double r47188927 = y;
double r47188928 = r47188926 * r47188927;
double r47188929 = z;
double r47188930 = r47188928 * r47188929;
double r47188931 = t;
double r47188932 = r47188930 * r47188931;
double r47188933 = a;
double r47188934 = 4.0;
double r47188935 = r47188933 * r47188934;
double r47188936 = r47188935 * r47188931;
double r47188937 = r47188932 - r47188936;
double r47188938 = b;
double r47188939 = c;
double r47188940 = r47188938 * r47188939;
double r47188941 = r47188937 + r47188940;
double r47188942 = r47188924 * r47188934;
double r47188943 = i;
double r47188944 = r47188942 * r47188943;
double r47188945 = r47188941 - r47188944;
double r47188946 = j;
double r47188947 = 27.0;
double r47188948 = r47188946 * r47188947;
double r47188949 = k;
double r47188950 = r47188948 * r47188949;
double r47188951 = r47188945 - r47188950;
return r47188951;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r47188952 = t;
double r47188953 = -1.2052033195878546e-38;
bool r47188954 = r47188952 <= r47188953;
double r47188955 = z;
double r47188956 = 18.0;
double r47188957 = r47188955 * r47188956;
double r47188958 = x;
double r47188959 = r47188957 * r47188958;
double r47188960 = y;
double r47188961 = r47188959 * r47188960;
double r47188962 = a;
double r47188963 = 4.0;
double r47188964 = r47188962 * r47188963;
double r47188965 = r47188961 - r47188964;
double r47188966 = r47188965 * r47188952;
double r47188967 = k;
double r47188968 = 27.0;
double r47188969 = r47188967 * r47188968;
double r47188970 = j;
double r47188971 = r47188969 * r47188970;
double r47188972 = i;
double r47188973 = r47188958 * r47188972;
double r47188974 = r47188973 * r47188963;
double r47188975 = c;
double r47188976 = b;
double r47188977 = r47188975 * r47188976;
double r47188978 = r47188974 - r47188977;
double r47188979 = r47188971 + r47188978;
double r47188980 = r47188966 - r47188979;
double r47188981 = 2.1398956214679056e+40;
bool r47188982 = r47188952 <= r47188981;
double r47188983 = r47188960 * r47188958;
double r47188984 = r47188956 * r47188983;
double r47188985 = r47188955 * r47188952;
double r47188986 = r47188984 * r47188985;
double r47188987 = r47188964 * r47188952;
double r47188988 = r47188986 - r47188987;
double r47188989 = r47188988 + r47188977;
double r47188990 = r47188963 * r47188958;
double r47188991 = r47188990 * r47188972;
double r47188992 = r47188989 - r47188991;
double r47188993 = r47188970 * r47188968;
double r47188994 = r47188993 * r47188967;
double r47188995 = r47188992 - r47188994;
double r47188996 = r47188982 ? r47188995 : r47188980;
double r47188997 = r47188954 ? r47188980 : r47188996;
return r47188997;
}




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.8 |
|---|---|
| Target | 1.7 |
| Herbie | 3.7 |
if t < -1.2052033195878546e-38 or 2.1398956214679056e+40 < t Initial program 1.8
Simplified2.1
if -1.2052033195878546e-38 < t < 2.1398956214679056e+40Initial program 8.2
Taylor expanded around 0 8.2
rmApplied associate-*l*4.7
Final simplification3.7
herbie shell --seed 2019171
(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)))