\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -2.231438472416083 \cdot 10^{-242}:\\
\;\;\;\;\left(\left(\left(z \cdot 18.0\right) \cdot x\right) \cdot y - a \cdot 4.0\right) \cdot t - \left(\left(j \cdot k\right) \cdot 27.0 + \left(\left(x \cdot i\right) \cdot 4.0 - c \cdot b\right)\right)\\
\mathbf{elif}\;t \le 4.700365572470833 \cdot 10^{-22}:\\
\;\;\;\;\left(\left(\left(\left(x \cdot \left(y \cdot 18.0\right)\right) \cdot \left(z \cdot t\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(4.0 \cdot x\right) \cdot i\right) - \left(27.0 \cdot j\right) \cdot k\\
\mathbf{else}:\\
\;\;\;\;t \cdot \left(\left(y \cdot x\right) \cdot \left(z \cdot 18.0\right) - a \cdot 4.0\right) - \left(\left(\left(x \cdot i\right) \cdot 4.0 - c \cdot b\right) + \left(27.0 \cdot k\right) \cdot j\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 r30364378 = x;
double r30364379 = 18.0;
double r30364380 = r30364378 * r30364379;
double r30364381 = y;
double r30364382 = r30364380 * r30364381;
double r30364383 = z;
double r30364384 = r30364382 * r30364383;
double r30364385 = t;
double r30364386 = r30364384 * r30364385;
double r30364387 = a;
double r30364388 = 4.0;
double r30364389 = r30364387 * r30364388;
double r30364390 = r30364389 * r30364385;
double r30364391 = r30364386 - r30364390;
double r30364392 = b;
double r30364393 = c;
double r30364394 = r30364392 * r30364393;
double r30364395 = r30364391 + r30364394;
double r30364396 = r30364378 * r30364388;
double r30364397 = i;
double r30364398 = r30364396 * r30364397;
double r30364399 = r30364395 - r30364398;
double r30364400 = j;
double r30364401 = 27.0;
double r30364402 = r30364400 * r30364401;
double r30364403 = k;
double r30364404 = r30364402 * r30364403;
double r30364405 = r30364399 - r30364404;
return r30364405;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r30364406 = t;
double r30364407 = -2.231438472416083e-242;
bool r30364408 = r30364406 <= r30364407;
double r30364409 = z;
double r30364410 = 18.0;
double r30364411 = r30364409 * r30364410;
double r30364412 = x;
double r30364413 = r30364411 * r30364412;
double r30364414 = y;
double r30364415 = r30364413 * r30364414;
double r30364416 = a;
double r30364417 = 4.0;
double r30364418 = r30364416 * r30364417;
double r30364419 = r30364415 - r30364418;
double r30364420 = r30364419 * r30364406;
double r30364421 = j;
double r30364422 = k;
double r30364423 = r30364421 * r30364422;
double r30364424 = 27.0;
double r30364425 = r30364423 * r30364424;
double r30364426 = i;
double r30364427 = r30364412 * r30364426;
double r30364428 = r30364427 * r30364417;
double r30364429 = c;
double r30364430 = b;
double r30364431 = r30364429 * r30364430;
double r30364432 = r30364428 - r30364431;
double r30364433 = r30364425 + r30364432;
double r30364434 = r30364420 - r30364433;
double r30364435 = 4.700365572470833e-22;
bool r30364436 = r30364406 <= r30364435;
double r30364437 = r30364414 * r30364410;
double r30364438 = r30364412 * r30364437;
double r30364439 = r30364409 * r30364406;
double r30364440 = r30364438 * r30364439;
double r30364441 = r30364418 * r30364406;
double r30364442 = r30364440 - r30364441;
double r30364443 = r30364442 + r30364431;
double r30364444 = r30364417 * r30364412;
double r30364445 = r30364444 * r30364426;
double r30364446 = r30364443 - r30364445;
double r30364447 = r30364424 * r30364421;
double r30364448 = r30364447 * r30364422;
double r30364449 = r30364446 - r30364448;
double r30364450 = r30364414 * r30364412;
double r30364451 = r30364450 * r30364411;
double r30364452 = r30364451 - r30364418;
double r30364453 = r30364406 * r30364452;
double r30364454 = r30364424 * r30364422;
double r30364455 = r30364454 * r30364421;
double r30364456 = r30364432 + r30364455;
double r30364457 = r30364453 - r30364456;
double r30364458 = r30364436 ? r30364449 : r30364457;
double r30364459 = r30364408 ? r30364434 : r30364458;
return r30364459;
}




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.2 |
|---|---|
| Target | 1.5 |
| Herbie | 3.8 |
if t < -2.231438472416083e-242Initial program 4.5
Simplified4.4
Taylor expanded around 0 4.3
if -2.231438472416083e-242 < t < 4.700365572470833e-22Initial program 7.8
rmApplied *-un-lft-identity7.8
Applied associate-*r*7.8
Simplified7.8
rmApplied associate-*l*4.2
if 4.700365572470833e-22 < t Initial program 2.0
Simplified2.1
rmApplied associate-*r*2.1
Final simplification3.8
herbie shell --seed 2019165
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18.0 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4.0)) (- (* c b) (* 27.0 (* k j)))) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b)))))
(- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))