\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}\;x \le -7.626211434592408442050935797592645449118 \cdot 10^{-36}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(\left(y \cdot z\right) \cdot t\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - 27 \cdot \left(k \cdot j\right)\\
\mathbf{elif}\;x \le 21885021756705142739042304:\\
\;\;\;\;\left(\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right) \cdot \sqrt[3]{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)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(z \cdot t\right)\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)\\
\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 r476397 = x;
double r476398 = 18.0;
double r476399 = r476397 * r476398;
double r476400 = y;
double r476401 = r476399 * r476400;
double r476402 = z;
double r476403 = r476401 * r476402;
double r476404 = t;
double r476405 = r476403 * r476404;
double r476406 = a;
double r476407 = 4.0;
double r476408 = r476406 * r476407;
double r476409 = r476408 * r476404;
double r476410 = r476405 - r476409;
double r476411 = b;
double r476412 = c;
double r476413 = r476411 * r476412;
double r476414 = r476410 + r476413;
double r476415 = r476397 * r476407;
double r476416 = i;
double r476417 = r476415 * r476416;
double r476418 = r476414 - r476417;
double r476419 = j;
double r476420 = 27.0;
double r476421 = r476419 * r476420;
double r476422 = k;
double r476423 = r476421 * r476422;
double r476424 = r476418 - r476423;
return r476424;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r476425 = x;
double r476426 = -7.626211434592408e-36;
bool r476427 = r476425 <= r476426;
double r476428 = 18.0;
double r476429 = r476425 * r476428;
double r476430 = y;
double r476431 = z;
double r476432 = r476430 * r476431;
double r476433 = t;
double r476434 = r476432 * r476433;
double r476435 = r476429 * r476434;
double r476436 = a;
double r476437 = 4.0;
double r476438 = r476436 * r476437;
double r476439 = r476438 * r476433;
double r476440 = r476435 - r476439;
double r476441 = b;
double r476442 = c;
double r476443 = r476441 * r476442;
double r476444 = r476440 + r476443;
double r476445 = r476425 * r476437;
double r476446 = i;
double r476447 = r476445 * r476446;
double r476448 = r476444 - r476447;
double r476449 = 27.0;
double r476450 = k;
double r476451 = j;
double r476452 = r476450 * r476451;
double r476453 = r476449 * r476452;
double r476454 = r476448 - r476453;
double r476455 = 2.1885021756705143e+25;
bool r476456 = r476425 <= r476455;
double r476457 = r476429 * r476430;
double r476458 = cbrt(r476431);
double r476459 = r476458 * r476458;
double r476460 = r476457 * r476459;
double r476461 = r476460 * r476458;
double r476462 = r476461 * r476433;
double r476463 = r476462 - r476439;
double r476464 = r476463 + r476443;
double r476465 = r476464 - r476447;
double r476466 = r476449 * r476450;
double r476467 = r476451 * r476466;
double r476468 = r476465 - r476467;
double r476469 = r476431 * r476433;
double r476470 = r476430 * r476469;
double r476471 = r476429 * r476470;
double r476472 = r476471 - r476439;
double r476473 = r476472 + r476443;
double r476474 = r476473 - r476447;
double r476475 = r476474 - r476467;
double r476476 = r476456 ? r476468 : r476475;
double r476477 = r476427 ? r476454 : r476476;
return r476477;
}




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.4 |
| Herbie | 2.0 |
if x < -7.626211434592408e-36Initial program 11.3
rmApplied associate-*l*11.3
rmApplied associate-*l*7.3
rmApplied associate-*l*2.6
Taylor expanded around 0 2.5
if -7.626211434592408e-36 < x < 2.1885021756705143e+25Initial program 1.6
rmApplied associate-*l*1.7
rmApplied add-cube-cbrt1.8
Applied associate-*r*1.8
if 2.1885021756705143e+25 < x Initial program 13.6
rmApplied associate-*l*13.8
rmApplied associate-*l*7.7
rmApplied associate-*l*1.9
rmApplied associate-*l*1.9
Final simplification2.0
herbie shell --seed 2019326 +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)))