\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 -1230856537969914387638316433408:\\
\;\;\;\;\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(\left(j \cdot 27\right) \cdot \left(\sqrt[3]{k} \cdot \sqrt[3]{k}\right)\right) \cdot \sqrt[3]{k}\\
\mathbf{elif}\;t \le 21.73111932267078572067475761286914348602:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(z \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(18 \cdot \left(x \cdot \left(z \cdot y\right)\right)\right)}^{1} \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 r762224 = x;
double r762225 = 18.0;
double r762226 = r762224 * r762225;
double r762227 = y;
double r762228 = r762226 * r762227;
double r762229 = z;
double r762230 = r762228 * r762229;
double r762231 = t;
double r762232 = r762230 * r762231;
double r762233 = a;
double r762234 = 4.0;
double r762235 = r762233 * r762234;
double r762236 = r762235 * r762231;
double r762237 = r762232 - r762236;
double r762238 = b;
double r762239 = c;
double r762240 = r762238 * r762239;
double r762241 = r762237 + r762240;
double r762242 = r762224 * r762234;
double r762243 = i;
double r762244 = r762242 * r762243;
double r762245 = r762241 - r762244;
double r762246 = j;
double r762247 = 27.0;
double r762248 = r762246 * r762247;
double r762249 = k;
double r762250 = r762248 * r762249;
double r762251 = r762245 - r762250;
return r762251;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r762252 = t;
double r762253 = -1.2308565379699144e+30;
bool r762254 = r762252 <= r762253;
double r762255 = x;
double r762256 = 18.0;
double r762257 = r762255 * r762256;
double r762258 = y;
double r762259 = r762257 * r762258;
double r762260 = z;
double r762261 = r762259 * r762260;
double r762262 = r762261 * r762252;
double r762263 = a;
double r762264 = 4.0;
double r762265 = r762263 * r762264;
double r762266 = r762265 * r762252;
double r762267 = r762262 - r762266;
double r762268 = b;
double r762269 = c;
double r762270 = r762268 * r762269;
double r762271 = r762267 + r762270;
double r762272 = r762255 * r762264;
double r762273 = i;
double r762274 = r762272 * r762273;
double r762275 = r762271 - r762274;
double r762276 = j;
double r762277 = 27.0;
double r762278 = r762276 * r762277;
double r762279 = k;
double r762280 = cbrt(r762279);
double r762281 = r762280 * r762280;
double r762282 = r762278 * r762281;
double r762283 = r762282 * r762280;
double r762284 = r762275 - r762283;
double r762285 = 21.731119322670786;
bool r762286 = r762252 <= r762285;
double r762287 = r762260 * r762252;
double r762288 = r762259 * r762287;
double r762289 = r762288 - r762266;
double r762290 = r762289 + r762270;
double r762291 = r762290 - r762274;
double r762292 = r762277 * r762279;
double r762293 = r762276 * r762292;
double r762294 = r762291 - r762293;
double r762295 = r762260 * r762258;
double r762296 = r762255 * r762295;
double r762297 = r762256 * r762296;
double r762298 = 1.0;
double r762299 = pow(r762297, r762298);
double r762300 = r762299 * r762252;
double r762301 = r762300 - r762266;
double r762302 = r762301 + r762270;
double r762303 = r762302 - r762274;
double r762304 = r762303 - r762293;
double r762305 = r762286 ? r762294 : r762304;
double r762306 = r762254 ? r762284 : r762305;
return r762306;
}




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.5 |
|---|---|
| Target | 1.6 |
| Herbie | 3.2 |
if t < -1.2308565379699144e+30Initial program 1.7
rmApplied add-cube-cbrt1.8
Applied associate-*r*1.8
if -1.2308565379699144e+30 < t < 21.731119322670786Initial program 7.3
rmApplied associate-*l*7.4
rmApplied associate-*l*3.9
if 21.731119322670786 < t Initial program 1.9
rmApplied associate-*l*1.7
rmApplied add-cube-cbrt1.9
Applied associate-*r*1.9
rmApplied pow11.9
Applied pow11.9
Applied pow11.9
Applied pow-prod-down1.9
Applied pow11.9
Applied pow11.9
Applied pow11.9
Applied pow-prod-down1.9
Applied pow-prod-down1.9
Applied pow-prod-down1.9
Applied pow-prod-down1.9
Simplified2.1
Final simplification3.2
herbie shell --seed 2020002
(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)))