\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}\;j \le -7.5553708004463452 \cdot 10^{121}:\\
\;\;\;\;\left(\left(x \cdot \left(\sqrt[3]{y \cdot z - t \cdot a} \cdot \sqrt[3]{y \cdot z - t \cdot a}\right)\right) \cdot \sqrt[3]{y \cdot z - t \cdot a} - b \cdot \left(c \cdot z - t \cdot i\right)\right) + j \cdot \left(c \cdot a - y \cdot i\right)\\
\mathbf{elif}\;j \le 1.0086390222625704 \cdot 10^{124}:\\
\;\;\;\;\left(x \cdot \left(y \cdot z - t \cdot a\right) - b \cdot \left(c \cdot z - t \cdot i\right)\right) + \left(a \cdot \left(j \cdot c\right) - i \cdot \left(y \cdot j\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(0 - b \cdot \left(c \cdot z - t \cdot i\right)\right) + 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 r803657 = x;
double r803658 = y;
double r803659 = z;
double r803660 = r803658 * r803659;
double r803661 = t;
double r803662 = a;
double r803663 = r803661 * r803662;
double r803664 = r803660 - r803663;
double r803665 = r803657 * r803664;
double r803666 = b;
double r803667 = c;
double r803668 = r803667 * r803659;
double r803669 = i;
double r803670 = r803661 * r803669;
double r803671 = r803668 - r803670;
double r803672 = r803666 * r803671;
double r803673 = r803665 - r803672;
double r803674 = j;
double r803675 = r803667 * r803662;
double r803676 = r803658 * r803669;
double r803677 = r803675 - r803676;
double r803678 = r803674 * r803677;
double r803679 = r803673 + r803678;
return r803679;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
double r803680 = j;
double r803681 = -7.555370800446345e+121;
bool r803682 = r803680 <= r803681;
double r803683 = x;
double r803684 = y;
double r803685 = z;
double r803686 = r803684 * r803685;
double r803687 = t;
double r803688 = a;
double r803689 = r803687 * r803688;
double r803690 = r803686 - r803689;
double r803691 = cbrt(r803690);
double r803692 = r803691 * r803691;
double r803693 = r803683 * r803692;
double r803694 = r803693 * r803691;
double r803695 = b;
double r803696 = c;
double r803697 = r803696 * r803685;
double r803698 = i;
double r803699 = r803687 * r803698;
double r803700 = r803697 - r803699;
double r803701 = r803695 * r803700;
double r803702 = r803694 - r803701;
double r803703 = r803696 * r803688;
double r803704 = r803684 * r803698;
double r803705 = r803703 - r803704;
double r803706 = r803680 * r803705;
double r803707 = r803702 + r803706;
double r803708 = 1.0086390222625704e+124;
bool r803709 = r803680 <= r803708;
double r803710 = r803683 * r803690;
double r803711 = r803710 - r803701;
double r803712 = r803680 * r803696;
double r803713 = r803688 * r803712;
double r803714 = r803684 * r803680;
double r803715 = r803698 * r803714;
double r803716 = r803713 - r803715;
double r803717 = r803711 + r803716;
double r803718 = 0.0;
double r803719 = r803718 - r803701;
double r803720 = r803719 + r803706;
double r803721 = r803709 ? r803717 : r803720;
double r803722 = r803682 ? r803707 : r803721;
return r803722;
}




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.1 |
|---|---|
| Target | 20.5 |
| Herbie | 10.6 |
if j < -7.555370800446345e+121Initial program 7.0
rmApplied add-cube-cbrt7.2
Applied associate-*r*7.2
if -7.555370800446345e+121 < j < 1.0086390222625704e+124Initial program 13.4
rmApplied add-cube-cbrt13.6
Applied associate-*l*13.6
rmApplied add-cube-cbrt13.7
Applied cbrt-prod13.7
Applied associate-*l*13.7
Taylor expanded around inf 10.5
if 1.0086390222625704e+124 < j Initial program 6.6
Taylor expanded around 0 14.9
Final simplification10.6
herbie shell --seed 2020064
(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)))))