\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}\;b \cdot c \le -7.78697423890387318 \cdot 10^{161}:\\
\;\;\;\;\left(\left(\left(0 \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{elif}\;b \cdot c \le -4.72896944561745812 \cdot 10^{44}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot z\right)\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{elif}\;b \cdot c \le -1.6071174332412006 \cdot 10^{-10}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot \left(x \cdot 18\right), t \cdot y, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, x \cdot i\right), \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{elif}\;b \cdot c \le 1.236802286 \cdot 10^{-314}:\\
\;\;\;\;\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{elif}\;b \cdot c \le 7.832862067016947 \cdot 10^{-40}:\\
\;\;\;\;\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(\sqrt{27} \cdot \left(k \cdot j\right)\right) \cdot \sqrt{27}\\
\mathbf{elif}\;b \cdot c \le 1.7946900526051252 \cdot 10^{23}:\\
\;\;\;\;\mathsf{fma}\left(z \cdot \left(x \cdot 18\right), t \cdot y, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, x \cdot i\right), \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot z\right)\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)\\
\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 r722432 = x;
double r722433 = 18.0;
double r722434 = r722432 * r722433;
double r722435 = y;
double r722436 = r722434 * r722435;
double r722437 = z;
double r722438 = r722436 * r722437;
double r722439 = t;
double r722440 = r722438 * r722439;
double r722441 = a;
double r722442 = 4.0;
double r722443 = r722441 * r722442;
double r722444 = r722443 * r722439;
double r722445 = r722440 - r722444;
double r722446 = b;
double r722447 = c;
double r722448 = r722446 * r722447;
double r722449 = r722445 + r722448;
double r722450 = r722432 * r722442;
double r722451 = i;
double r722452 = r722450 * r722451;
double r722453 = r722449 - r722452;
double r722454 = j;
double r722455 = 27.0;
double r722456 = r722454 * r722455;
double r722457 = k;
double r722458 = r722456 * r722457;
double r722459 = r722453 - r722458;
return r722459;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r722460 = b;
double r722461 = c;
double r722462 = r722460 * r722461;
double r722463 = -7.786974238903873e+161;
bool r722464 = r722462 <= r722463;
double r722465 = 0.0;
double r722466 = t;
double r722467 = r722465 * r722466;
double r722468 = a;
double r722469 = 4.0;
double r722470 = r722468 * r722469;
double r722471 = r722470 * r722466;
double r722472 = r722467 - r722471;
double r722473 = r722472 + r722462;
double r722474 = x;
double r722475 = r722474 * r722469;
double r722476 = i;
double r722477 = r722475 * r722476;
double r722478 = r722473 - r722477;
double r722479 = j;
double r722480 = 27.0;
double r722481 = k;
double r722482 = r722480 * r722481;
double r722483 = r722479 * r722482;
double r722484 = r722478 - r722483;
double r722485 = -4.728969445617458e+44;
bool r722486 = r722462 <= r722485;
double r722487 = 18.0;
double r722488 = r722474 * r722487;
double r722489 = y;
double r722490 = z;
double r722491 = r722489 * r722490;
double r722492 = r722488 * r722491;
double r722493 = r722492 * r722466;
double r722494 = r722493 - r722471;
double r722495 = r722494 + r722462;
double r722496 = r722495 - r722477;
double r722497 = r722496 - r722483;
double r722498 = -1.6071174332412006e-10;
bool r722499 = r722462 <= r722498;
double r722500 = r722490 * r722488;
double r722501 = r722466 * r722489;
double r722502 = r722474 * r722476;
double r722503 = fma(r722466, r722468, r722502);
double r722504 = r722479 * r722480;
double r722505 = r722504 * r722481;
double r722506 = fma(r722469, r722503, r722505);
double r722507 = r722462 - r722506;
double r722508 = fma(r722500, r722501, r722507);
double r722509 = 1.2368022860888e-314;
bool r722510 = r722462 <= r722509;
double r722511 = r722488 * r722489;
double r722512 = r722490 * r722466;
double r722513 = r722511 * r722512;
double r722514 = r722513 - r722471;
double r722515 = r722514 + r722462;
double r722516 = r722515 - r722477;
double r722517 = r722516 - r722483;
double r722518 = 7.832862067016947e-40;
bool r722519 = r722462 <= r722518;
double r722520 = r722511 * r722490;
double r722521 = r722520 * r722466;
double r722522 = r722521 - r722471;
double r722523 = r722522 + r722462;
double r722524 = r722523 - r722477;
double r722525 = sqrt(r722480);
double r722526 = r722481 * r722479;
double r722527 = r722525 * r722526;
double r722528 = r722527 * r722525;
double r722529 = r722524 - r722528;
double r722530 = 1.7946900526051252e+23;
bool r722531 = r722462 <= r722530;
double r722532 = r722531 ? r722508 : r722497;
double r722533 = r722519 ? r722529 : r722532;
double r722534 = r722510 ? r722517 : r722533;
double r722535 = r722499 ? r722508 : r722534;
double r722536 = r722486 ? r722497 : r722535;
double r722537 = r722464 ? r722484 : r722536;
return r722537;
}




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.2 |
|---|---|
| Target | 1.5 |
| Herbie | 5.7 |
if (* b c) < -7.786974238903873e+161Initial program 5.8
rmApplied associate-*l*5.8
Taylor expanded around 0 3.8
if -7.786974238903873e+161 < (* b c) < -4.728969445617458e+44 or 1.7946900526051252e+23 < (* b c) Initial program 4.8
rmApplied associate-*l*4.8
rmApplied associate-*l*6.2
if -4.728969445617458e+44 < (* b c) < -1.6071174332412006e-10 or 7.832862067016947e-40 < (* b c) < 1.7946900526051252e+23Initial program 5.1
Simplified6.5
if -1.6071174332412006e-10 < (* b c) < 1.2368022860888e-314Initial program 5.1
rmApplied associate-*l*5.1
rmApplied associate-*l*5.5
if 1.2368022860888e-314 < (* b c) < 7.832862067016947e-40Initial program 5.6
rmApplied pow15.6
Applied pow15.6
Applied pow15.6
Applied pow-prod-down5.6
Applied pow-prod-down5.6
Simplified5.6
rmApplied add-sqr-sqrt5.6
Applied associate-*l*5.7
Final simplification5.7
herbie shell --seed 2020047 +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)))