\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}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - 27.0 \cdot \left(j \cdot k\right)\\
\mathbf{elif}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i \le 1.736218430949862 \cdot 10^{+238}:\\
\;\;\;\;\left(\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - j \cdot \left(27.0 \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(18.0 \cdot \left(\left(t \cdot \left(z \cdot x\right)\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - 27.0 \cdot \left(j \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 r32738468 = x;
double r32738469 = 18.0;
double r32738470 = r32738468 * r32738469;
double r32738471 = y;
double r32738472 = r32738470 * r32738471;
double r32738473 = z;
double r32738474 = r32738472 * r32738473;
double r32738475 = t;
double r32738476 = r32738474 * r32738475;
double r32738477 = a;
double r32738478 = 4.0;
double r32738479 = r32738477 * r32738478;
double r32738480 = r32738479 * r32738475;
double r32738481 = r32738476 - r32738480;
double r32738482 = b;
double r32738483 = c;
double r32738484 = r32738482 * r32738483;
double r32738485 = r32738481 + r32738484;
double r32738486 = r32738468 * r32738478;
double r32738487 = i;
double r32738488 = r32738486 * r32738487;
double r32738489 = r32738485 - r32738488;
double r32738490 = j;
double r32738491 = 27.0;
double r32738492 = r32738490 * r32738491;
double r32738493 = k;
double r32738494 = r32738492 * r32738493;
double r32738495 = r32738489 - r32738494;
return r32738495;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r32738496 = t;
double r32738497 = x;
double r32738498 = 18.0;
double r32738499 = r32738497 * r32738498;
double r32738500 = y;
double r32738501 = r32738499 * r32738500;
double r32738502 = z;
double r32738503 = r32738501 * r32738502;
double r32738504 = r32738496 * r32738503;
double r32738505 = a;
double r32738506 = 4.0;
double r32738507 = r32738505 * r32738506;
double r32738508 = r32738507 * r32738496;
double r32738509 = r32738504 - r32738508;
double r32738510 = c;
double r32738511 = b;
double r32738512 = r32738510 * r32738511;
double r32738513 = r32738509 + r32738512;
double r32738514 = r32738497 * r32738506;
double r32738515 = i;
double r32738516 = r32738514 * r32738515;
double r32738517 = r32738513 - r32738516;
double r32738518 = -inf.0;
bool r32738519 = r32738517 <= r32738518;
double r32738520 = r32738496 * r32738502;
double r32738521 = r32738501 * r32738520;
double r32738522 = r32738521 - r32738508;
double r32738523 = r32738522 + r32738512;
double r32738524 = r32738523 - r32738516;
double r32738525 = 27.0;
double r32738526 = j;
double r32738527 = k;
double r32738528 = r32738526 * r32738527;
double r32738529 = r32738525 * r32738528;
double r32738530 = r32738524 - r32738529;
double r32738531 = 1.736218430949862e+238;
bool r32738532 = r32738517 <= r32738531;
double r32738533 = r32738525 * r32738527;
double r32738534 = r32738526 * r32738533;
double r32738535 = r32738517 - r32738534;
double r32738536 = r32738502 * r32738497;
double r32738537 = r32738496 * r32738536;
double r32738538 = r32738537 * r32738500;
double r32738539 = r32738498 * r32738538;
double r32738540 = r32738539 - r32738508;
double r32738541 = r32738540 + r32738512;
double r32738542 = r32738541 - r32738516;
double r32738543 = r32738542 - r32738529;
double r32738544 = r32738532 ? r32738535 : r32738543;
double r32738545 = r32738519 ? r32738530 : r32738544;
return r32738545;
}




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.4 |
|---|---|
| Target | 1.4 |
| Herbie | 2.9 |
if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0Initial program 60.5
Taylor expanded around 0 60.5
rmApplied associate-*l*32.5
if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 1.736218430949862e+238Initial program 0.3
rmApplied associate-*l*0.3
if 1.736218430949862e+238 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) Initial program 18.4
Taylor expanded around 0 18.3
Taylor expanded around inf 13.4
rmApplied associate-*r*13.8
rmApplied associate-*r*8.6
Final simplification2.9
herbie shell --seed 2019163
(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)))