\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 -2.814761326386550777279758521488119181836 \cdot 10^{156}:\\
\;\;\;\;b \cdot c - \left(x \cdot \left(4 \cdot i\right) + j \cdot \left(27 \cdot k\right)\right)\\
\mathbf{elif}\;x \le 2.490620401820025423975805319912306702311 \cdot 10^{-84}:\\
\;\;\;\;\left(\left(\sqrt[3]{t} \cdot \sqrt[3]{t}\right) \cdot \left(\sqrt[3]{t} \cdot \left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4\right)\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\right)\right) + t \cdot \left(-a \cdot 4\right)\right) + b \cdot c\right) - \left(\left(x \cdot 4\right) \cdot i + \left(j \cdot 27\right) \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 r547348 = x;
double r547349 = 18.0;
double r547350 = r547348 * r547349;
double r547351 = y;
double r547352 = r547350 * r547351;
double r547353 = z;
double r547354 = r547352 * r547353;
double r547355 = t;
double r547356 = r547354 * r547355;
double r547357 = a;
double r547358 = 4.0;
double r547359 = r547357 * r547358;
double r547360 = r547359 * r547355;
double r547361 = r547356 - r547360;
double r547362 = b;
double r547363 = c;
double r547364 = r547362 * r547363;
double r547365 = r547361 + r547364;
double r547366 = r547348 * r547358;
double r547367 = i;
double r547368 = r547366 * r547367;
double r547369 = r547365 - r547368;
double r547370 = j;
double r547371 = 27.0;
double r547372 = r547370 * r547371;
double r547373 = k;
double r547374 = r547372 * r547373;
double r547375 = r547369 - r547374;
return r547375;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r547376 = x;
double r547377 = -2.8147613263865508e+156;
bool r547378 = r547376 <= r547377;
double r547379 = b;
double r547380 = c;
double r547381 = r547379 * r547380;
double r547382 = 4.0;
double r547383 = i;
double r547384 = r547382 * r547383;
double r547385 = r547376 * r547384;
double r547386 = j;
double r547387 = 27.0;
double r547388 = k;
double r547389 = r547387 * r547388;
double r547390 = r547386 * r547389;
double r547391 = r547385 + r547390;
double r547392 = r547381 - r547391;
double r547393 = 2.4906204018200254e-84;
bool r547394 = r547376 <= r547393;
double r547395 = t;
double r547396 = cbrt(r547395);
double r547397 = r547396 * r547396;
double r547398 = 18.0;
double r547399 = r547376 * r547398;
double r547400 = y;
double r547401 = r547399 * r547400;
double r547402 = z;
double r547403 = r547401 * r547402;
double r547404 = a;
double r547405 = r547404 * r547382;
double r547406 = r547403 - r547405;
double r547407 = r547396 * r547406;
double r547408 = r547397 * r547407;
double r547409 = r547408 + r547381;
double r547410 = r547376 * r547382;
double r547411 = r547410 * r547383;
double r547412 = r547386 * r547387;
double r547413 = r547412 * r547388;
double r547414 = r547411 + r547413;
double r547415 = r547409 - r547414;
double r547416 = r547402 * r547400;
double r547417 = r547376 * r547416;
double r547418 = r547395 * r547417;
double r547419 = r547398 * r547418;
double r547420 = -r547405;
double r547421 = r547395 * r547420;
double r547422 = r547419 + r547421;
double r547423 = r547422 + r547381;
double r547424 = r547423 - r547414;
double r547425 = r547394 ? r547415 : r547424;
double r547426 = r547378 ? r547392 : r547425;
return r547426;
}




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.6 |
| Herbie | 5.3 |
if x < -2.8147613263865508e+156Initial program 19.9
Simplified19.9
rmApplied associate-*l*19.9
rmApplied associate-*l*19.8
rmApplied associate-*l*19.7
Taylor expanded around 0 22.6
if -2.8147613263865508e+156 < x < 2.4906204018200254e-84Initial program 3.0
Simplified3.0
rmApplied add-cube-cbrt3.4
Applied associate-*l*3.4
if 2.4906204018200254e-84 < x Initial program 8.8
Simplified8.8
rmApplied sub-neg8.8
Applied distribute-lft-in8.8
Simplified6.0
Final simplification5.3
herbie shell --seed 2019305
(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.680279438052224) (+ (- (* (* 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)))