\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 -263371289885747968 \lor \neg \left(z \le 1.255594091630913827396134314174144965199 \cdot 10^{-148}\right):\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(x \cdot 18\right)\right) \cdot y\right) \cdot z - \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\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\right)\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 r683399 = x;
double r683400 = 18.0;
double r683401 = r683399 * r683400;
double r683402 = y;
double r683403 = r683401 * r683402;
double r683404 = z;
double r683405 = r683403 * r683404;
double r683406 = t;
double r683407 = r683405 * r683406;
double r683408 = a;
double r683409 = 4.0;
double r683410 = r683408 * r683409;
double r683411 = r683410 * r683406;
double r683412 = r683407 - r683411;
double r683413 = b;
double r683414 = c;
double r683415 = r683413 * r683414;
double r683416 = r683412 + r683415;
double r683417 = r683399 * r683409;
double r683418 = i;
double r683419 = r683417 * r683418;
double r683420 = r683416 - r683419;
double r683421 = j;
double r683422 = 27.0;
double r683423 = r683421 * r683422;
double r683424 = k;
double r683425 = r683423 * r683424;
double r683426 = r683420 - r683425;
return r683426;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r683427 = z;
double r683428 = -2.6337128988574797e+17;
bool r683429 = r683427 <= r683428;
double r683430 = 1.2555940916309138e-148;
bool r683431 = r683427 <= r683430;
double r683432 = !r683431;
bool r683433 = r683429 || r683432;
double r683434 = t;
double r683435 = x;
double r683436 = 18.0;
double r683437 = r683435 * r683436;
double r683438 = r683434 * r683437;
double r683439 = y;
double r683440 = r683438 * r683439;
double r683441 = r683440 * r683427;
double r683442 = a;
double r683443 = 4.0;
double r683444 = r683442 * r683443;
double r683445 = r683444 * r683434;
double r683446 = r683441 - r683445;
double r683447 = b;
double r683448 = c;
double r683449 = r683447 * r683448;
double r683450 = r683446 + r683449;
double r683451 = r683435 * r683443;
double r683452 = i;
double r683453 = r683451 * r683452;
double r683454 = r683450 - r683453;
double r683455 = j;
double r683456 = 27.0;
double r683457 = r683455 * r683456;
double r683458 = k;
double r683459 = r683457 * r683458;
double r683460 = r683454 - r683459;
double r683461 = r683427 * r683439;
double r683462 = r683435 * r683461;
double r683463 = r683434 * r683462;
double r683464 = r683436 * r683463;
double r683465 = r683464 - r683445;
double r683466 = r683465 + r683449;
double r683467 = r683466 - r683453;
double r683468 = r683467 - r683459;
double r683469 = r683433 ? r683460 : r683468;
return r683469;
}




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 | 2.1 |
if z < -2.6337128988574797e+17 or 1.2555940916309138e-148 < z Initial program 6.5
Taylor expanded around inf 10.2
Simplified2.8
rmApplied associate-*r*2.8
if -2.6337128988574797e+17 < z < 1.2555940916309138e-148Initial program 4.5
Taylor expanded around inf 1.1
Simplified7.2
Taylor expanded around inf 1.1
Final simplification2.1
herbie shell --seed 2019305 +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.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)))