\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(\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) - \left(27.0 \cdot j\right) \cdot k = -\infty:\\
\;\;\;\;\mathsf{fma}\left(b, c, \left(z \cdot \left(t \cdot x\right)\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(k \cdot 27.0\right) \cdot j\right)\right)\\
\mathbf{elif}\;\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) - \left(27.0 \cdot j\right) \cdot k \le 2.6091300751783966 \cdot 10^{+305}:\\
\;\;\;\;\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) - \left(27.0 \cdot j\right) \cdot k\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(b, c, \left(z \cdot \left(t \cdot x\right)\right) \cdot \left(y \cdot 18.0\right) - \mathsf{fma}\left(4.0, \mathsf{fma}\left(t, a, x \cdot i\right), \left(k \cdot 27.0\right) \cdot j\right)\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 r33807484 = x;
double r33807485 = 18.0;
double r33807486 = r33807484 * r33807485;
double r33807487 = y;
double r33807488 = r33807486 * r33807487;
double r33807489 = z;
double r33807490 = r33807488 * r33807489;
double r33807491 = t;
double r33807492 = r33807490 * r33807491;
double r33807493 = a;
double r33807494 = 4.0;
double r33807495 = r33807493 * r33807494;
double r33807496 = r33807495 * r33807491;
double r33807497 = r33807492 - r33807496;
double r33807498 = b;
double r33807499 = c;
double r33807500 = r33807498 * r33807499;
double r33807501 = r33807497 + r33807500;
double r33807502 = r33807484 * r33807494;
double r33807503 = i;
double r33807504 = r33807502 * r33807503;
double r33807505 = r33807501 - r33807504;
double r33807506 = j;
double r33807507 = 27.0;
double r33807508 = r33807506 * r33807507;
double r33807509 = k;
double r33807510 = r33807508 * r33807509;
double r33807511 = r33807505 - r33807510;
return r33807511;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r33807512 = t;
double r33807513 = x;
double r33807514 = 18.0;
double r33807515 = r33807513 * r33807514;
double r33807516 = y;
double r33807517 = r33807515 * r33807516;
double r33807518 = z;
double r33807519 = r33807517 * r33807518;
double r33807520 = r33807512 * r33807519;
double r33807521 = a;
double r33807522 = 4.0;
double r33807523 = r33807521 * r33807522;
double r33807524 = r33807523 * r33807512;
double r33807525 = r33807520 - r33807524;
double r33807526 = c;
double r33807527 = b;
double r33807528 = r33807526 * r33807527;
double r33807529 = r33807525 + r33807528;
double r33807530 = r33807513 * r33807522;
double r33807531 = i;
double r33807532 = r33807530 * r33807531;
double r33807533 = r33807529 - r33807532;
double r33807534 = 27.0;
double r33807535 = j;
double r33807536 = r33807534 * r33807535;
double r33807537 = k;
double r33807538 = r33807536 * r33807537;
double r33807539 = r33807533 - r33807538;
double r33807540 = -inf.0;
bool r33807541 = r33807539 <= r33807540;
double r33807542 = r33807512 * r33807513;
double r33807543 = r33807518 * r33807542;
double r33807544 = r33807516 * r33807514;
double r33807545 = r33807543 * r33807544;
double r33807546 = r33807513 * r33807531;
double r33807547 = fma(r33807512, r33807521, r33807546);
double r33807548 = r33807537 * r33807534;
double r33807549 = r33807548 * r33807535;
double r33807550 = fma(r33807522, r33807547, r33807549);
double r33807551 = r33807545 - r33807550;
double r33807552 = fma(r33807527, r33807526, r33807551);
double r33807553 = 2.6091300751783966e+305;
bool r33807554 = r33807539 <= r33807553;
double r33807555 = r33807554 ? r33807539 : r33807552;
double r33807556 = r33807541 ? r33807552 : r33807555;
return r33807556;
}




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.8 |
|---|---|
| Target | 1.7 |
| Herbie | 0.8 |
if (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)) < -inf.0 or 2.6091300751783966e+305 < (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)) Initial program 57.7
Simplified12.6
rmApplied associate-*r*12.6
rmApplied associate-*r*5.2
if -inf.0 < (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)) < 2.6091300751783966e+305Initial program 0.3
Final simplification0.8
herbie shell --seed 2019162 +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"
: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)))