\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(\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 = -\infty \lor \neg \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 \le 1.408347514255849598590216064760682864053 \cdot 10^{307}\right):\\
\;\;\;\;\left(\left(\left(x \cdot \left(\left(18 \cdot \left(y \cdot z\right)\right) \cdot t\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\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) - 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 r740952 = x;
double r740953 = 18.0;
double r740954 = r740952 * r740953;
double r740955 = y;
double r740956 = r740954 * r740955;
double r740957 = z;
double r740958 = r740956 * r740957;
double r740959 = t;
double r740960 = r740958 * r740959;
double r740961 = a;
double r740962 = 4.0;
double r740963 = r740961 * r740962;
double r740964 = r740963 * r740959;
double r740965 = r740960 - r740964;
double r740966 = b;
double r740967 = c;
double r740968 = r740966 * r740967;
double r740969 = r740965 + r740968;
double r740970 = r740952 * r740962;
double r740971 = i;
double r740972 = r740970 * r740971;
double r740973 = r740969 - r740972;
double r740974 = j;
double r740975 = 27.0;
double r740976 = r740974 * r740975;
double r740977 = k;
double r740978 = r740976 * r740977;
double r740979 = r740973 - r740978;
return r740979;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r740980 = x;
double r740981 = 18.0;
double r740982 = r740980 * r740981;
double r740983 = y;
double r740984 = r740982 * r740983;
double r740985 = z;
double r740986 = r740984 * r740985;
double r740987 = t;
double r740988 = r740986 * r740987;
double r740989 = a;
double r740990 = 4.0;
double r740991 = r740989 * r740990;
double r740992 = r740991 * r740987;
double r740993 = r740988 - r740992;
double r740994 = b;
double r740995 = c;
double r740996 = r740994 * r740995;
double r740997 = r740993 + r740996;
double r740998 = r740980 * r740990;
double r740999 = i;
double r741000 = r740998 * r740999;
double r741001 = r740997 - r741000;
double r741002 = -inf.0;
bool r741003 = r741001 <= r741002;
double r741004 = 1.4083475142558496e+307;
bool r741005 = r741001 <= r741004;
double r741006 = !r741005;
bool r741007 = r741003 || r741006;
double r741008 = r740983 * r740985;
double r741009 = r740981 * r741008;
double r741010 = r741009 * r740987;
double r741011 = r740980 * r741010;
double r741012 = r741011 - r740992;
double r741013 = r741012 + r740996;
double r741014 = r741013 - r741000;
double r741015 = j;
double r741016 = 27.0;
double r741017 = k;
double r741018 = r741016 * r741017;
double r741019 = r741015 * r741018;
double r741020 = r741014 - r741019;
double r741021 = r741001 - r741019;
double r741022 = r741007 ? r741020 : r741021;
return r741022;
}




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.7 |
| Herbie | 1.8 |
if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0 or 1.4083475142558496e+307 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) Initial program 63.0
rmApplied associate-*l*40.5
rmApplied associate-*l*40.2
rmApplied associate-*l*40.3
rmApplied associate-*l*16.8
if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 1.4083475142558496e+307Initial program 0.3
rmApplied associate-*l*0.3
Final simplification1.8
herbie shell --seed 2019354 +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)))