\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}\;z \le -4.15846637414394352 \cdot 10^{131} \lor \neg \left(z \le 3.14022389051985691 \cdot 10^{43}\right):\\
\;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, {\left(18 \cdot \left(x \cdot \left(z \cdot y\right)\right)\right)}^{1} - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \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 r868983 = x;
double r868984 = 18.0;
double r868985 = r868983 * r868984;
double r868986 = y;
double r868987 = r868985 * r868986;
double r868988 = z;
double r868989 = r868987 * r868988;
double r868990 = t;
double r868991 = r868989 * r868990;
double r868992 = a;
double r868993 = 4.0;
double r868994 = r868992 * r868993;
double r868995 = r868994 * r868990;
double r868996 = r868991 - r868995;
double r868997 = b;
double r868998 = c;
double r868999 = r868997 * r868998;
double r869000 = r868996 + r868999;
double r869001 = r868983 * r868993;
double r869002 = i;
double r869003 = r869001 * r869002;
double r869004 = r869000 - r869003;
double r869005 = j;
double r869006 = 27.0;
double r869007 = r869005 * r869006;
double r869008 = k;
double r869009 = r869007 * r869008;
double r869010 = r869004 - r869009;
return r869010;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r869011 = z;
double r869012 = -4.1584663741439435e+131;
bool r869013 = r869011 <= r869012;
double r869014 = 3.140223890519857e+43;
bool r869015 = r869011 <= r869014;
double r869016 = !r869015;
bool r869017 = r869013 || r869016;
double r869018 = t;
double r869019 = x;
double r869020 = 18.0;
double r869021 = r869019 * r869020;
double r869022 = y;
double r869023 = r869021 * r869022;
double r869024 = r869023 * r869011;
double r869025 = a;
double r869026 = 4.0;
double r869027 = r869025 * r869026;
double r869028 = r869024 - r869027;
double r869029 = b;
double r869030 = c;
double r869031 = r869029 * r869030;
double r869032 = i;
double r869033 = r869026 * r869032;
double r869034 = j;
double r869035 = 27.0;
double r869036 = k;
double r869037 = r869035 * r869036;
double r869038 = r869034 * r869037;
double r869039 = fma(r869019, r869033, r869038);
double r869040 = r869031 - r869039;
double r869041 = fma(r869018, r869028, r869040);
double r869042 = r869011 * r869022;
double r869043 = r869019 * r869042;
double r869044 = r869020 * r869043;
double r869045 = 1.0;
double r869046 = pow(r869044, r869045);
double r869047 = r869046 - r869027;
double r869048 = r869034 * r869035;
double r869049 = r869048 * r869036;
double r869050 = fma(r869019, r869033, r869049);
double r869051 = r869031 - r869050;
double r869052 = fma(r869018, r869047, r869051);
double r869053 = r869017 ? r869041 : r869052;
return r869053;
}




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
| Original | 5.4 |
|---|---|
| Target | 1.7 |
| Herbie | 3.7 |
if z < -4.1584663741439435e+131 or 3.140223890519857e+43 < z Initial program 7.9
Simplified7.9
rmApplied associate-*l*8.0
if -4.1584663741439435e+131 < z < 3.140223890519857e+43Initial program 4.4
Simplified4.4
rmApplied pow14.4
Applied pow14.4
Applied pow14.4
Applied pow14.4
Applied pow-prod-down4.4
Applied pow-prod-down4.4
Applied pow-prod-down4.4
Simplified1.9
Final simplification3.7
herbie shell --seed 2020057 +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)))