\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 -5.502401519030054 \cdot 10^{-23}:\\
\;\;\;\;\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 1.59245233661014477 \cdot 10^{46}:\\
\;\;\;\;\mathsf{fma}\left(t, {\left(18 \cdot \left(x \cdot \left(z \cdot y\right)\right)\right)}^{1} - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\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) - \left(j \cdot 27\right) \cdot k\\
\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 r732489 = x;
double r732490 = 18.0;
double r732491 = r732489 * r732490;
double r732492 = y;
double r732493 = r732491 * r732492;
double r732494 = z;
double r732495 = r732493 * r732494;
double r732496 = t;
double r732497 = r732495 * r732496;
double r732498 = a;
double r732499 = 4.0;
double r732500 = r732498 * r732499;
double r732501 = r732500 * r732496;
double r732502 = r732497 - r732501;
double r732503 = b;
double r732504 = c;
double r732505 = r732503 * r732504;
double r732506 = r732502 + r732505;
double r732507 = r732489 * r732499;
double r732508 = i;
double r732509 = r732507 * r732508;
double r732510 = r732506 - r732509;
double r732511 = j;
double r732512 = 27.0;
double r732513 = r732511 * r732512;
double r732514 = k;
double r732515 = r732513 * r732514;
double r732516 = r732510 - r732515;
return r732516;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r732517 = z;
double r732518 = -5.502401519030054e-23;
bool r732519 = r732517 <= r732518;
double r732520 = t;
double r732521 = x;
double r732522 = 18.0;
double r732523 = y;
double r732524 = r732522 * r732523;
double r732525 = r732521 * r732524;
double r732526 = r732525 * r732517;
double r732527 = a;
double r732528 = 4.0;
double r732529 = r732527 * r732528;
double r732530 = r732526 - r732529;
double r732531 = b;
double r732532 = c;
double r732533 = r732531 * r732532;
double r732534 = i;
double r732535 = r732528 * r732534;
double r732536 = j;
double r732537 = 27.0;
double r732538 = k;
double r732539 = r732537 * r732538;
double r732540 = r732536 * r732539;
double r732541 = fma(r732521, r732535, r732540);
double r732542 = r732533 - r732541;
double r732543 = fma(r732520, r732530, r732542);
double r732544 = 1.5924523366101448e+46;
bool r732545 = r732517 <= r732544;
double r732546 = r732517 * r732523;
double r732547 = r732521 * r732546;
double r732548 = r732522 * r732547;
double r732549 = 1.0;
double r732550 = pow(r732548, r732549);
double r732551 = r732550 - r732529;
double r732552 = r732536 * r732537;
double r732553 = r732552 * r732538;
double r732554 = fma(r732521, r732535, r732553);
double r732555 = r732533 - r732554;
double r732556 = fma(r732520, r732551, r732555);
double r732557 = r732521 * r732522;
double r732558 = r732557 * r732523;
double r732559 = r732517 * r732520;
double r732560 = r732558 * r732559;
double r732561 = r732529 * r732520;
double r732562 = r732560 - r732561;
double r732563 = r732562 + r732533;
double r732564 = r732521 * r732528;
double r732565 = r732564 * r732534;
double r732566 = r732563 - r732565;
double r732567 = r732566 - r732553;
double r732568 = r732545 ? r732556 : r732567;
double r732569 = r732519 ? r732543 : r732568;
return r732569;
}




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.7 |
|---|---|
| Target | 1.6 |
| Herbie | 4.1 |
if z < -5.502401519030054e-23Initial program 6.6
Simplified6.6
rmApplied associate-*l*6.6
rmApplied associate-*l*6.6
if -5.502401519030054e-23 < z < 1.5924523366101448e+46Initial program 4.7
Simplified4.8
rmApplied pow14.8
Applied pow14.8
Applied pow14.8
Applied pow14.8
Applied pow-prod-down4.8
Applied pow-prod-down4.8
Applied pow-prod-down4.8
Simplified1.4
if 1.5924523366101448e+46 < z Initial program 7.8
rmApplied associate-*l*9.7
Final simplification4.1
herbie shell --seed 2020081 +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)))