\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}\;z \le -3.2649420662695442 \cdot 10^{-224}:\\
\;\;\;\;\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(a \cdot \left(y3 \cdot \left(y1 \cdot z\right)\right) - \left(y0 \cdot \left(z \cdot \left(y3 \cdot c\right)\right) + a \cdot \left(x \cdot \left(y2 \cdot y1\right)\right)\right)\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)\\
\mathbf{elif}\;z \le 2.85563530538145874 \cdot 10^{-168}:\\
\;\;\;\;\left(\left(\left(\left(\left(t \cdot \left(i \cdot \left(z \cdot c\right)\right) - \left(i \cdot \left(c \cdot \left(y \cdot x\right)\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(\left(t \cdot j - y \cdot k\right) \cdot \left(\sqrt[3]{y4 \cdot b - y5 \cdot i} \cdot \sqrt[3]{y4 \cdot b - y5 \cdot i}\right)\right) \cdot \sqrt[3]{y4 \cdot b - y5 \cdot i}\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{else}:\\
\;\;\;\;\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 \left(\sqrt[3]{y4 \cdot c - y5 \cdot a} \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\right)\right) \cdot \sqrt[3]{y4 \cdot c - y5 \cdot a}\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 r607871 = x;
double r607872 = y;
double r607873 = r607871 * r607872;
double r607874 = z;
double r607875 = t;
double r607876 = r607874 * r607875;
double r607877 = r607873 - r607876;
double r607878 = a;
double r607879 = b;
double r607880 = r607878 * r607879;
double r607881 = c;
double r607882 = i;
double r607883 = r607881 * r607882;
double r607884 = r607880 - r607883;
double r607885 = r607877 * r607884;
double r607886 = j;
double r607887 = r607871 * r607886;
double r607888 = k;
double r607889 = r607874 * r607888;
double r607890 = r607887 - r607889;
double r607891 = y0;
double r607892 = r607891 * r607879;
double r607893 = y1;
double r607894 = r607893 * r607882;
double r607895 = r607892 - r607894;
double r607896 = r607890 * r607895;
double r607897 = r607885 - r607896;
double r607898 = y2;
double r607899 = r607871 * r607898;
double r607900 = y3;
double r607901 = r607874 * r607900;
double r607902 = r607899 - r607901;
double r607903 = r607891 * r607881;
double r607904 = r607893 * r607878;
double r607905 = r607903 - r607904;
double r607906 = r607902 * r607905;
double r607907 = r607897 + r607906;
double r607908 = r607875 * r607886;
double r607909 = r607872 * r607888;
double r607910 = r607908 - r607909;
double r607911 = y4;
double r607912 = r607911 * r607879;
double r607913 = y5;
double r607914 = r607913 * r607882;
double r607915 = r607912 - r607914;
double r607916 = r607910 * r607915;
double r607917 = r607907 + r607916;
double r607918 = r607875 * r607898;
double r607919 = r607872 * r607900;
double r607920 = r607918 - r607919;
double r607921 = r607911 * r607881;
double r607922 = r607913 * r607878;
double r607923 = r607921 - r607922;
double r607924 = r607920 * r607923;
double r607925 = r607917 - r607924;
double r607926 = r607888 * r607898;
double r607927 = r607886 * r607900;
double r607928 = r607926 - r607927;
double r607929 = r607911 * r607893;
double r607930 = r607913 * r607891;
double r607931 = r607929 - r607930;
double r607932 = r607928 * r607931;
double r607933 = r607925 + r607932;
return r607933;
}
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 r607934 = z;
double r607935 = -3.264942066269544e-224;
bool r607936 = r607934 <= r607935;
double r607937 = x;
double r607938 = y;
double r607939 = r607937 * r607938;
double r607940 = t;
double r607941 = r607934 * r607940;
double r607942 = r607939 - r607941;
double r607943 = a;
double r607944 = b;
double r607945 = r607943 * r607944;
double r607946 = c;
double r607947 = i;
double r607948 = r607946 * r607947;
double r607949 = r607945 - r607948;
double r607950 = r607942 * r607949;
double r607951 = j;
double r607952 = r607937 * r607951;
double r607953 = k;
double r607954 = r607934 * r607953;
double r607955 = r607952 - r607954;
double r607956 = y0;
double r607957 = r607956 * r607944;
double r607958 = y1;
double r607959 = r607958 * r607947;
double r607960 = r607957 - r607959;
double r607961 = r607955 * r607960;
double r607962 = r607950 - r607961;
double r607963 = y3;
double r607964 = r607958 * r607934;
double r607965 = r607963 * r607964;
double r607966 = r607943 * r607965;
double r607967 = r607963 * r607946;
double r607968 = r607934 * r607967;
double r607969 = r607956 * r607968;
double r607970 = y2;
double r607971 = r607970 * r607958;
double r607972 = r607937 * r607971;
double r607973 = r607943 * r607972;
double r607974 = r607969 + r607973;
double r607975 = r607966 - r607974;
double r607976 = r607962 + r607975;
double r607977 = r607940 * r607951;
double r607978 = r607938 * r607953;
double r607979 = r607977 - r607978;
double r607980 = y4;
double r607981 = r607980 * r607944;
double r607982 = y5;
double r607983 = r607982 * r607947;
double r607984 = r607981 - r607983;
double r607985 = r607979 * r607984;
double r607986 = r607976 + r607985;
double r607987 = r607940 * r607970;
double r607988 = r607938 * r607963;
double r607989 = r607987 - r607988;
double r607990 = r607980 * r607946;
double r607991 = r607982 * r607943;
double r607992 = r607990 - r607991;
double r607993 = r607989 * r607992;
double r607994 = r607986 - r607993;
double r607995 = r607953 * r607970;
double r607996 = r607951 * r607963;
double r607997 = r607995 - r607996;
double r607998 = r607980 * r607958;
double r607999 = r607982 * r607956;
double r608000 = r607998 - r607999;
double r608001 = r607997 * r608000;
double r608002 = r607994 + r608001;
double r608003 = 2.8556353053814587e-168;
bool r608004 = r607934 <= r608003;
double r608005 = r607934 * r607946;
double r608006 = r607947 * r608005;
double r608007 = r607940 * r608006;
double r608008 = r607938 * r607937;
double r608009 = r607946 * r608008;
double r608010 = r607947 * r608009;
double r608011 = r607934 * r607944;
double r608012 = r607940 * r608011;
double r608013 = r607943 * r608012;
double r608014 = r608010 + r608013;
double r608015 = r608007 - r608014;
double r608016 = r608015 - r607961;
double r608017 = r607937 * r607970;
double r608018 = r607934 * r607963;
double r608019 = r608017 - r608018;
double r608020 = r607956 * r607946;
double r608021 = r607958 * r607943;
double r608022 = r608020 - r608021;
double r608023 = r608019 * r608022;
double r608024 = r608016 + r608023;
double r608025 = cbrt(r607984);
double r608026 = r608025 * r608025;
double r608027 = r607979 * r608026;
double r608028 = r608027 * r608025;
double r608029 = r608024 + r608028;
double r608030 = r608029 - r607993;
double r608031 = r608030 + r608001;
double r608032 = r607962 + r608023;
double r608033 = r608032 + r607985;
double r608034 = cbrt(r607992);
double r608035 = r608034 * r608034;
double r608036 = r607989 * r608035;
double r608037 = r608036 * r608034;
double r608038 = r608033 - r608037;
double r608039 = r608038 + r608001;
double r608040 = r608004 ? r608031 : r608039;
double r608041 = r607936 ? r608002 : r608040;
return r608041;
}




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
Results
| Original | 27.1 |
|---|---|
| Target | 30.8 |
| Herbie | 28.5 |
if z < -3.264942066269544e-224Initial program 27.3
Taylor expanded around inf 30.3
if -3.264942066269544e-224 < z < 2.8556353053814587e-168Initial program 27.2
rmApplied add-cube-cbrt27.4
Applied associate-*r*27.4
Taylor expanded around inf 27.6
if 2.8556353053814587e-168 < z Initial program 26.9
rmApplied add-cube-cbrt26.9
Applied associate-*r*26.9
Final simplification28.5
herbie shell --seed 2020046
(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)))))