\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)
\begin{array}{l}
\mathbf{if}\;t \le -2.170921980918471249066722659595249022854 \cdot 10^{-198}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(\sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)} \cdot \sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)}\right) \cdot \sqrt[3]{\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right)} + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;t \le 4.224835810085253984713968194681658884927 \cdot 10^{-259}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \mathsf{fma}\left(k, i \cdot \left(y \cdot y5\right), -\mathsf{fma}\left(t, i \cdot \left(j \cdot y5\right), k \cdot \left(y4 \cdot \left(y \cdot b\right)\right)\right)\right)\right) - \left(t \cdot y2 - y \cdot y3\right) \cdot \left(y4 \cdot c - y5 \cdot a\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)\\
\mathbf{elif}\;t \le 3.852001203169608621368313039789462383833 \cdot 10^{-38}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right) + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(\sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)} \cdot \sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)}\right) \cdot \sqrt[3]{\left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\mathsf{fma}\left(t, i \cdot \left(z \cdot c\right), -\mathsf{fma}\left(i, c \cdot \left(y \cdot x\right), a \cdot \left(t \cdot \left(z \cdot b\right)\right)\right)\right) - \left(x \cdot j - z \cdot k\right) \cdot \left(y0 \cdot b - y1 \cdot i\right)\right) + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)\right) + \left(t \cdot j - y \cdot k\right) \cdot \left(y4 \cdot b - y5 \cdot i\right)\right) - \left(\left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(y4, c, -a \cdot y5\right) + \left(t \cdot y2 - y \cdot y3\right) \cdot \mathsf{fma}\left(-a, y5, a \cdot y5\right)\right)\right) + \left(k \cdot y2 - j \cdot y3\right) \cdot \left(y4 \cdot y1 - y5 \cdot y0\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 y0, double y1, double y2, double y3, double y4, double y5) {
double r580840 = x;
double r580841 = y;
double r580842 = r580840 * r580841;
double r580843 = z;
double r580844 = t;
double r580845 = r580843 * r580844;
double r580846 = r580842 - r580845;
double r580847 = a;
double r580848 = b;
double r580849 = r580847 * r580848;
double r580850 = c;
double r580851 = i;
double r580852 = r580850 * r580851;
double r580853 = r580849 - r580852;
double r580854 = r580846 * r580853;
double r580855 = j;
double r580856 = r580840 * r580855;
double r580857 = k;
double r580858 = r580843 * r580857;
double r580859 = r580856 - r580858;
double r580860 = y0;
double r580861 = r580860 * r580848;
double r580862 = y1;
double r580863 = r580862 * r580851;
double r580864 = r580861 - r580863;
double r580865 = r580859 * r580864;
double r580866 = r580854 - r580865;
double r580867 = y2;
double r580868 = r580840 * r580867;
double r580869 = y3;
double r580870 = r580843 * r580869;
double r580871 = r580868 - r580870;
double r580872 = r580860 * r580850;
double r580873 = r580862 * r580847;
double r580874 = r580872 - r580873;
double r580875 = r580871 * r580874;
double r580876 = r580866 + r580875;
double r580877 = r580844 * r580855;
double r580878 = r580841 * r580857;
double r580879 = r580877 - r580878;
double r580880 = y4;
double r580881 = r580880 * r580848;
double r580882 = y5;
double r580883 = r580882 * r580851;
double r580884 = r580881 - r580883;
double r580885 = r580879 * r580884;
double r580886 = r580876 + r580885;
double r580887 = r580844 * r580867;
double r580888 = r580841 * r580869;
double r580889 = r580887 - r580888;
double r580890 = r580880 * r580850;
double r580891 = r580882 * r580847;
double r580892 = r580890 - r580891;
double r580893 = r580889 * r580892;
double r580894 = r580886 - r580893;
double r580895 = r580857 * r580867;
double r580896 = r580855 * r580869;
double r580897 = r580895 - r580896;
double r580898 = r580880 * r580862;
double r580899 = r580882 * r580860;
double r580900 = r580898 - r580899;
double r580901 = r580897 * r580900;
double r580902 = r580894 + r580901;
return r580902;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k, double y0, double y1, double y2, double y3, double y4, double y5) {
double r580903 = t;
double r580904 = -2.1709219809184712e-198;
bool r580905 = r580903 <= r580904;
double r580906 = x;
double r580907 = y;
double r580908 = r580906 * r580907;
double r580909 = z;
double r580910 = r580909 * r580903;
double r580911 = r580908 - r580910;
double r580912 = a;
double r580913 = b;
double r580914 = r580912 * r580913;
double r580915 = c;
double r580916 = i;
double r580917 = r580915 * r580916;
double r580918 = r580914 - r580917;
double r580919 = r580911 * r580918;
double r580920 = j;
double r580921 = r580906 * r580920;
double r580922 = k;
double r580923 = r580909 * r580922;
double r580924 = r580921 - r580923;
double r580925 = y0;
double r580926 = r580925 * r580913;
double r580927 = y1;
double r580928 = r580927 * r580916;
double r580929 = r580926 - r580928;
double r580930 = r580924 * r580929;
double r580931 = r580919 - r580930;
double r580932 = y2;
double r580933 = r580906 * r580932;
double r580934 = y3;
double r580935 = r580909 * r580934;
double r580936 = r580933 - r580935;
double r580937 = r580925 * r580915;
double r580938 = r580927 * r580912;
double r580939 = r580937 - r580938;
double r580940 = r580936 * r580939;
double r580941 = r580931 + r580940;
double r580942 = r580903 * r580920;
double r580943 = r580907 * r580922;
double r580944 = r580942 - r580943;
double r580945 = y4;
double r580946 = r580945 * r580913;
double r580947 = y5;
double r580948 = r580947 * r580916;
double r580949 = r580946 - r580948;
double r580950 = r580944 * r580949;
double r580951 = r580941 + r580950;
double r580952 = r580903 * r580932;
double r580953 = r580907 * r580934;
double r580954 = r580952 - r580953;
double r580955 = r580912 * r580947;
double r580956 = -r580955;
double r580957 = fma(r580945, r580915, r580956);
double r580958 = r580954 * r580957;
double r580959 = cbrt(r580958);
double r580960 = r580959 * r580959;
double r580961 = r580960 * r580959;
double r580962 = -r580912;
double r580963 = fma(r580962, r580947, r580955);
double r580964 = r580954 * r580963;
double r580965 = r580961 + r580964;
double r580966 = r580951 - r580965;
double r580967 = r580922 * r580932;
double r580968 = r580920 * r580934;
double r580969 = r580967 - r580968;
double r580970 = r580945 * r580927;
double r580971 = r580947 * r580925;
double r580972 = r580970 - r580971;
double r580973 = r580969 * r580972;
double r580974 = r580966 + r580973;
double r580975 = 4.224835810085254e-259;
bool r580976 = r580903 <= r580975;
double r580977 = r580907 * r580947;
double r580978 = r580916 * r580977;
double r580979 = r580920 * r580947;
double r580980 = r580916 * r580979;
double r580981 = r580907 * r580913;
double r580982 = r580945 * r580981;
double r580983 = r580922 * r580982;
double r580984 = fma(r580903, r580980, r580983);
double r580985 = -r580984;
double r580986 = fma(r580922, r580978, r580985);
double r580987 = r580941 + r580986;
double r580988 = r580945 * r580915;
double r580989 = r580947 * r580912;
double r580990 = r580988 - r580989;
double r580991 = r580954 * r580990;
double r580992 = r580987 - r580991;
double r580993 = r580992 + r580973;
double r580994 = 3.8520012031696086e-38;
bool r580995 = r580903 <= r580994;
double r580996 = r580958 + r580964;
double r580997 = r580951 - r580996;
double r580998 = cbrt(r580973);
double r580999 = r580998 * r580998;
double r581000 = r580999 * r580998;
double r581001 = r580997 + r581000;
double r581002 = r580909 * r580915;
double r581003 = r580916 * r581002;
double r581004 = r580907 * r580906;
double r581005 = r580915 * r581004;
double r581006 = r580909 * r580913;
double r581007 = r580903 * r581006;
double r581008 = r580912 * r581007;
double r581009 = fma(r580916, r581005, r581008);
double r581010 = -r581009;
double r581011 = fma(r580903, r581003, r581010);
double r581012 = r581011 - r580930;
double r581013 = r581012 + r580940;
double r581014 = r581013 + r580950;
double r581015 = r581014 - r580996;
double r581016 = r581015 + r580973;
double r581017 = r580995 ? r581001 : r581016;
double r581018 = r580976 ? r580993 : r581017;
double r581019 = r580905 ? r580974 : r581018;
return r581019;
}




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




Bits error versus y0




Bits error versus y1




Bits error versus y2




Bits error versus y3




Bits error versus y4




Bits error versus y5
| Original | 27.2 |
|---|---|
| Target | 31.0 |
| Herbie | 27.9 |
if t < -2.1709219809184712e-198Initial program 28.1
rmApplied prod-diff28.1
Applied distribute-lft-in28.1
rmApplied add-cube-cbrt28.2
if -2.1709219809184712e-198 < t < 4.224835810085254e-259Initial program 27.1
Taylor expanded around inf 29.2
Simplified29.2
if 4.224835810085254e-259 < t < 3.8520012031696086e-38Initial program 25.3
rmApplied prod-diff25.3
Applied distribute-lft-in25.3
rmApplied add-cube-cbrt25.4
if 3.8520012031696086e-38 < t Initial program 27.7
rmApplied prod-diff27.7
Applied distribute-lft-in27.7
Taylor expanded around inf 29.0
Simplified29.0
Final simplification27.9
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a b c i j k y0 y1 y2 y3 y4 y5)
:name "Linear.Matrix:det44 from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< y4 -7.206256231996481e+60) (- (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))))) (- (/ (- (* y2 t) (* y3 y)) (/ 1 (- (* y4 c) (* y5 a)))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (if (< y4 -3.364603505246317e-66) (+ (- (- (- (* (* t c) (* i z)) (* (* a t) (* b z))) (* (* y c) (* i x))) (* (- (* b y0) (* i y1)) (- (* j x) (* k z)))) (- (* (- (* y0 c) (* a y1)) (- (* x y2) (* z y3))) (- (* (- (* t y2) (* y y3)) (- (* y4 c) (* a y5))) (* (- (* y1 y4) (* y5 y0)) (- (* k y2) (* j y3)))))) (if (< y4 -1.2000065055686116e-105) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 6.718963124057495e-279) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (if (< y4 4.77962681403792e-222) (+ (+ (- (* (- (* j t) (* k y)) (- (* y4 b) (* y5 i))) (* (* y3 y) (- (* y5 a) (* y4 c)))) (+ (* (* y5 a) (* t y2)) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* x y2) (* z y3)) (- (* c y0) (* a y1))) (- (* (- (* b y0) (* i y1)) (- (* j x) (* k z))) (* (- (* y x) (* z t)) (- (* b a) (* i c)))))) (if (< y4 2.2852241541266835e-175) (+ (- (- (- (* (* k y) (* y5 i)) (* (* y b) (* y4 k))) (* (* y5 t) (* i j))) (- (* (- (* y2 t) (* y3 y)) (- (* y4 c) (* y5 a))) (* (- (* y2 k) (* y3 j)) (- (* y4 y1) (* y5 y0))))) (- (* (- (* b a) (* i c)) (- (* y x) (* t z))) (- (* (- (* j x) (* k z)) (- (* y0 b) (* i y1))) (* (- (* y2 x) (* y3 z)) (- (* c y0) (* y1 a)))))) (+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (- (* k (* i (* z y1))) (+ (* j (* i (* x y1))) (* y0 (* k (* z b)))))) (- (* z (* y3 (* a y1))) (+ (* y2 (* x (* a y1))) (* y0 (* z (* c y3)))))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0))))))))))
(+ (- (+ (+ (- (* (- (* x y) (* z t)) (- (* a b) (* c i))) (* (- (* x j) (* z k)) (- (* y0 b) (* y1 i)))) (* (- (* x y2) (* z y3)) (- (* y0 c) (* y1 a)))) (* (- (* t j) (* y k)) (- (* y4 b) (* y5 i)))) (* (- (* t y2) (* y y3)) (- (* y4 c) (* y5 a)))) (* (- (* k y2) (* j y3)) (- (* y4 y1) (* y5 y0)))))