\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.995746752057705666616031777662888381911 \cdot 10^{-77}:\\
\;\;\;\;\mathsf{fma}\left(t, \left(x \cdot \left(18 \cdot y\right)\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{elif}\;z \le 31.71288006302372508571352227590978145599:\\
\;\;\;\;t \cdot \left({\left(18 \cdot \left(x \cdot \left(z \cdot y\right)\right)\right)}^{1} - a \cdot 4\right) + \left(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(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{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 r791088 = x;
double r791089 = 18.0;
double r791090 = r791088 * r791089;
double r791091 = y;
double r791092 = r791090 * r791091;
double r791093 = z;
double r791094 = r791092 * r791093;
double r791095 = t;
double r791096 = r791094 * r791095;
double r791097 = a;
double r791098 = 4.0;
double r791099 = r791097 * r791098;
double r791100 = r791099 * r791095;
double r791101 = r791096 - r791100;
double r791102 = b;
double r791103 = c;
double r791104 = r791102 * r791103;
double r791105 = r791101 + r791104;
double r791106 = r791088 * r791098;
double r791107 = i;
double r791108 = r791106 * r791107;
double r791109 = r791105 - r791108;
double r791110 = j;
double r791111 = 27.0;
double r791112 = r791110 * r791111;
double r791113 = k;
double r791114 = r791112 * r791113;
double r791115 = r791109 - r791114;
return r791115;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r791116 = z;
double r791117 = -4.995746752057706e-77;
bool r791118 = r791116 <= r791117;
double r791119 = t;
double r791120 = x;
double r791121 = 18.0;
double r791122 = y;
double r791123 = r791121 * r791122;
double r791124 = r791120 * r791123;
double r791125 = r791124 * r791116;
double r791126 = a;
double r791127 = 4.0;
double r791128 = r791126 * r791127;
double r791129 = r791125 - r791128;
double r791130 = b;
double r791131 = c;
double r791132 = r791130 * r791131;
double r791133 = i;
double r791134 = r791127 * r791133;
double r791135 = j;
double r791136 = 27.0;
double r791137 = k;
double r791138 = r791136 * r791137;
double r791139 = r791135 * r791138;
double r791140 = fma(r791120, r791134, r791139);
double r791141 = r791132 - r791140;
double r791142 = fma(r791119, r791129, r791141);
double r791143 = 31.712880063023725;
bool r791144 = r791116 <= r791143;
double r791145 = r791116 * r791122;
double r791146 = r791120 * r791145;
double r791147 = r791121 * r791146;
double r791148 = 1.0;
double r791149 = pow(r791147, r791148);
double r791150 = r791149 - r791128;
double r791151 = r791119 * r791150;
double r791152 = r791151 + r791141;
double r791153 = r791120 * r791121;
double r791154 = r791153 * r791122;
double r791155 = r791154 * r791116;
double r791156 = r791155 - r791128;
double r791157 = r791135 * r791136;
double r791158 = cbrt(r791137);
double r791159 = r791158 * r791158;
double r791160 = r791157 * r791159;
double r791161 = r791160 * r791158;
double r791162 = fma(r791120, r791134, r791161);
double r791163 = r791132 - r791162;
double r791164 = fma(r791119, r791156, r791163);
double r791165 = r791144 ? r791152 : r791164;
double r791166 = r791118 ? r791142 : r791165;
return r791166;
}




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.5 |
|---|---|
| Target | 1.6 |
| Herbie | 3.9 |
if z < -4.995746752057706e-77Initial program 5.7
Simplified5.7
rmApplied associate-*l*5.8
rmApplied associate-*l*5.8
if -4.995746752057706e-77 < z < 31.712880063023725Initial program 4.6
Simplified4.6
rmApplied associate-*l*4.6
rmApplied fma-udef4.6
rmApplied pow14.6
Applied pow14.6
Applied pow14.6
Applied pow14.6
Applied pow-prod-down4.6
Applied pow-prod-down4.6
Applied pow-prod-down4.6
Simplified1.2
if 31.712880063023725 < z Initial program 7.0
Simplified7.0
rmApplied add-cube-cbrt7.3
Applied associate-*r*7.3
Final simplification3.9
herbie shell --seed 2020002 +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)))