\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)
\begin{array}{l}
\mathbf{if}\;b \le -2.557156540206759491060099266665758475148 \cdot 10^{77}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\sqrt[3]{j} \cdot \sqrt[3]{j}\right) \cdot \left(\sqrt[3]{j} \cdot \left(c \cdot a - y \cdot i\right)\right)\\
\mathbf{elif}\;b \le 6.288387807050133384086894370081620679201 \cdot 10^{-14}:\\
\;\;\;\;j \cdot \left(c \cdot a - y \cdot i\right) + \left(x \cdot \left(y \cdot z - t \cdot a\right) - \left(z \cdot \left(b \cdot c\right) + \left(-t \cdot \left(i \cdot b\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(\sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)} \cdot \sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)}\right) \cdot \sqrt[3]{j \cdot \left(c \cdot a - y \cdot i\right)}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r551597 = x;
double r551598 = y;
double r551599 = z;
double r551600 = r551598 * r551599;
double r551601 = t;
double r551602 = a;
double r551603 = r551601 * r551602;
double r551604 = r551600 - r551603;
double r551605 = r551597 * r551604;
double r551606 = b;
double r551607 = c;
double r551608 = r551607 * r551599;
double r551609 = i;
double r551610 = r551601 * r551609;
double r551611 = r551608 - r551610;
double r551612 = r551606 * r551611;
double r551613 = r551605 - r551612;
double r551614 = j;
double r551615 = r551607 * r551602;
double r551616 = r551598 * r551609;
double r551617 = r551615 - r551616;
double r551618 = r551614 * r551617;
double r551619 = r551613 + r551618;
return r551619;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r551620 = b;
double r551621 = -2.5571565402067595e+77;
bool r551622 = r551620 <= r551621;
double r551623 = x;
double r551624 = y;
double r551625 = z;
double r551626 = r551624 * r551625;
double r551627 = t;
double r551628 = a;
double r551629 = r551627 * r551628;
double r551630 = r551626 - r551629;
double r551631 = r551623 * r551630;
double r551632 = c;
double r551633 = r551632 * r551625;
double r551634 = i;
double r551635 = r551627 * r551634;
double r551636 = r551633 - r551635;
double r551637 = r551620 * r551636;
double r551638 = r551631 - r551637;
double r551639 = j;
double r551640 = cbrt(r551639);
double r551641 = r551640 * r551640;
double r551642 = r551632 * r551628;
double r551643 = r551624 * r551634;
double r551644 = r551642 - r551643;
double r551645 = r551640 * r551644;
double r551646 = r551641 * r551645;
double r551647 = r551638 + r551646;
double r551648 = 6.288387807050133e-14;
bool r551649 = r551620 <= r551648;
double r551650 = r551639 * r551644;
double r551651 = r551620 * r551632;
double r551652 = r551625 * r551651;
double r551653 = r551634 * r551620;
double r551654 = r551627 * r551653;
double r551655 = -r551654;
double r551656 = r551652 + r551655;
double r551657 = r551631 - r551656;
double r551658 = r551650 + r551657;
double r551659 = cbrt(r551650);
double r551660 = r551659 * r551659;
double r551661 = r551660 * r551659;
double r551662 = r551638 + r551661;
double r551663 = r551649 ? r551658 : r551662;
double r551664 = r551622 ? r551647 : r551663;
return r551664;
}




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
Results
| Original | 12.5 |
|---|---|
| Target | 20.4 |
| Herbie | 9.2 |
if b < -2.5571565402067595e+77Initial program 7.4
rmApplied add-cube-cbrt7.5
Applied associate-*l*7.6
if -2.5571565402067595e+77 < b < 6.288387807050133e-14Initial program 15.3
rmApplied sub-neg15.3
Applied distribute-lft-in15.3
Simplified12.8
rmApplied *-un-lft-identity12.8
Applied associate-*l*12.8
Simplified10.1
if 6.288387807050133e-14 < b Initial program 7.4
rmApplied add-cube-cbrt7.5
Final simplification9.2
herbie shell --seed 2019323
(FPCore (x y z t a b c i j)
:name "Data.Colour.Matrix:determinant from colour-2.3.3, A"
:precision binary64
:herbie-target
(if (< x -1.469694296777705e-64) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i)))) (if (< x 3.2113527362226803e-147) (- (* (- (* b i) (* x a)) t) (- (* z (* c b)) (* j (- (* c a) (* y i))))) (+ (- (* x (- (* y z) (* t a))) (/ (* b (- (pow (* c z) 2) (pow (* t i) 2))) (+ (* c z) (* t i)))) (* j (- (* c a) (* y i))))))
(+ (- (* x (- (* y z) (* t a))) (* b (- (* c z) (* t i)))) (* j (- (* c a) (* y i)))))