\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}\;\left(j \cdot 27\right) \cdot k \le -2.954442886009252531198288738982951568249 \cdot 10^{-102}:\\
\;\;\;\;\left(\left(-a \cdot 4\right) \cdot t + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \sqrt{27} \cdot \left(\sqrt{27} \cdot \left(k \cdot j\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + j \cdot \left(27 \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 r52911 = x;
double r52912 = 18.0;
double r52913 = r52911 * r52912;
double r52914 = y;
double r52915 = r52913 * r52914;
double r52916 = z;
double r52917 = r52915 * r52916;
double r52918 = t;
double r52919 = r52917 * r52918;
double r52920 = a;
double r52921 = 4.0;
double r52922 = r52920 * r52921;
double r52923 = r52922 * r52918;
double r52924 = r52919 - r52923;
double r52925 = b;
double r52926 = c;
double r52927 = r52925 * r52926;
double r52928 = r52924 + r52927;
double r52929 = r52911 * r52921;
double r52930 = i;
double r52931 = r52929 * r52930;
double r52932 = r52928 - r52931;
double r52933 = j;
double r52934 = 27.0;
double r52935 = r52933 * r52934;
double r52936 = k;
double r52937 = r52935 * r52936;
double r52938 = r52932 - r52937;
return r52938;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r52939 = j;
double r52940 = 27.0;
double r52941 = r52939 * r52940;
double r52942 = k;
double r52943 = r52941 * r52942;
double r52944 = -2.9544428860092525e-102;
bool r52945 = r52943 <= r52944;
double r52946 = a;
double r52947 = 4.0;
double r52948 = r52946 * r52947;
double r52949 = -r52948;
double r52950 = t;
double r52951 = r52949 * r52950;
double r52952 = b;
double r52953 = c;
double r52954 = r52952 * r52953;
double r52955 = r52951 + r52954;
double r52956 = x;
double r52957 = r52956 * r52947;
double r52958 = i;
double r52959 = r52957 * r52958;
double r52960 = sqrt(r52940);
double r52961 = r52942 * r52939;
double r52962 = r52960 * r52961;
double r52963 = r52960 * r52962;
double r52964 = r52959 + r52963;
double r52965 = r52955 - r52964;
double r52966 = 18.0;
double r52967 = r52956 * r52966;
double r52968 = y;
double r52969 = r52967 * r52968;
double r52970 = z;
double r52971 = r52969 * r52970;
double r52972 = r52971 - r52948;
double r52973 = r52950 * r52972;
double r52974 = r52973 + r52954;
double r52975 = r52940 * r52942;
double r52976 = r52939 * r52975;
double r52977 = r52959 + r52976;
double r52978 = r52974 - r52977;
double r52979 = r52945 ? r52965 : r52978;
return r52979;
}




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.6 |
|---|---|
| Target | 1.6 |
| Herbie | 6.7 |
if (* (* j 27.0) k) < -2.9544428860092525e-102Initial program 5.1
Simplified5.1
rmApplied associate-*l*5.1
Taylor expanded around 0 5.0
rmApplied add-sqr-sqrt5.0
Applied associate-*l*5.1
Taylor expanded around 0 8.7
if -2.9544428860092525e-102 < (* (* j 27.0) k) Initial program 5.8
Simplified5.8
rmApplied associate-*l*5.8
Final simplification6.7
herbie shell --seed 2019315
(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)))