\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}\;b \le -8.58198075515020159 \cdot 10^{-119}:\\
\;\;\;\;\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}\;b \le 7.027026353257974 \cdot 10^{-32}:\\
\;\;\;\;\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(y0 \cdot \left(y3 \cdot \left(j \cdot y5\right) - y2 \cdot \left(k \cdot y5\right)\right) - y1 \cdot \left(y3 \cdot \left(j \cdot y4\right)\right)\right)\\
\mathbf{elif}\;b \le 9.3413417779978113 \cdot 10^{101}:\\
\;\;\;\;\left(\left(\left(\left(\sqrt[3]{\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right)} \cdot \sqrt[3]{\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right)}\right) \cdot \sqrt[3]{\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(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}\;b \le 1.5943958207630799 \cdot 10^{186}:\\
\;\;\;\;\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(y0 \cdot \left(y3 \cdot \left(j \cdot y5\right) - y2 \cdot \left(k \cdot y5\right)\right) - y1 \cdot \left(y3 \cdot \left(j \cdot y4\right)\right)\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(\sqrt[3]{\left(x \cdot y2 - z \cdot y3\right) \cdot \left(y0 \cdot c - y1 \cdot a\right)} \cdot \sqrt[3]{\left(\left(x \cdot y2 - z \cdot y3\right) \cdot \left(\sqrt[3]{y0 \cdot c - y1 \cdot a} \cdot \sqrt[3]{y0 \cdot c - y1 \cdot a}\right)\right) \cdot \sqrt[3]{y0 \cdot c - y1 \cdot a}}\right) \cdot \sqrt[3]{\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)\\
\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 r881910 = x;
double r881911 = y;
double r881912 = r881910 * r881911;
double r881913 = z;
double r881914 = t;
double r881915 = r881913 * r881914;
double r881916 = r881912 - r881915;
double r881917 = a;
double r881918 = b;
double r881919 = r881917 * r881918;
double r881920 = c;
double r881921 = i;
double r881922 = r881920 * r881921;
double r881923 = r881919 - r881922;
double r881924 = r881916 * r881923;
double r881925 = j;
double r881926 = r881910 * r881925;
double r881927 = k;
double r881928 = r881913 * r881927;
double r881929 = r881926 - r881928;
double r881930 = y0;
double r881931 = r881930 * r881918;
double r881932 = y1;
double r881933 = r881932 * r881921;
double r881934 = r881931 - r881933;
double r881935 = r881929 * r881934;
double r881936 = r881924 - r881935;
double r881937 = y2;
double r881938 = r881910 * r881937;
double r881939 = y3;
double r881940 = r881913 * r881939;
double r881941 = r881938 - r881940;
double r881942 = r881930 * r881920;
double r881943 = r881932 * r881917;
double r881944 = r881942 - r881943;
double r881945 = r881941 * r881944;
double r881946 = r881936 + r881945;
double r881947 = r881914 * r881925;
double r881948 = r881911 * r881927;
double r881949 = r881947 - r881948;
double r881950 = y4;
double r881951 = r881950 * r881918;
double r881952 = y5;
double r881953 = r881952 * r881921;
double r881954 = r881951 - r881953;
double r881955 = r881949 * r881954;
double r881956 = r881946 + r881955;
double r881957 = r881914 * r881937;
double r881958 = r881911 * r881939;
double r881959 = r881957 - r881958;
double r881960 = r881950 * r881920;
double r881961 = r881952 * r881917;
double r881962 = r881960 - r881961;
double r881963 = r881959 * r881962;
double r881964 = r881956 - r881963;
double r881965 = r881927 * r881937;
double r881966 = r881925 * r881939;
double r881967 = r881965 - r881966;
double r881968 = r881950 * r881932;
double r881969 = r881952 * r881930;
double r881970 = r881968 - r881969;
double r881971 = r881967 * r881970;
double r881972 = r881964 + r881971;
return r881972;
}
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 r881973 = b;
double r881974 = -8.581980755150202e-119;
bool r881975 = r881973 <= r881974;
double r881976 = x;
double r881977 = y;
double r881978 = r881976 * r881977;
double r881979 = z;
double r881980 = t;
double r881981 = r881979 * r881980;
double r881982 = r881978 - r881981;
double r881983 = a;
double r881984 = r881983 * r881973;
double r881985 = c;
double r881986 = i;
double r881987 = r881985 * r881986;
double r881988 = r881984 - r881987;
double r881989 = r881982 * r881988;
double r881990 = j;
double r881991 = r881976 * r881990;
double r881992 = k;
double r881993 = r881979 * r881992;
double r881994 = r881991 - r881993;
double r881995 = y0;
double r881996 = r881995 * r881973;
double r881997 = y1;
double r881998 = r881997 * r881986;
double r881999 = r881996 - r881998;
double r882000 = r881994 * r881999;
double r882001 = r881989 - r882000;
double r882002 = y3;
double r882003 = r881997 * r881979;
double r882004 = r882002 * r882003;
double r882005 = r881983 * r882004;
double r882006 = r882002 * r881985;
double r882007 = r881979 * r882006;
double r882008 = r881995 * r882007;
double r882009 = y2;
double r882010 = r882009 * r881997;
double r882011 = r881976 * r882010;
double r882012 = r881983 * r882011;
double r882013 = r882008 + r882012;
double r882014 = r882005 - r882013;
double r882015 = r882001 + r882014;
double r882016 = r881980 * r881990;
double r882017 = r881977 * r881992;
double r882018 = r882016 - r882017;
double r882019 = y4;
double r882020 = r882019 * r881973;
double r882021 = y5;
double r882022 = r882021 * r881986;
double r882023 = r882020 - r882022;
double r882024 = r882018 * r882023;
double r882025 = r882015 + r882024;
double r882026 = r881980 * r882009;
double r882027 = r881977 * r882002;
double r882028 = r882026 - r882027;
double r882029 = r882019 * r881985;
double r882030 = r882021 * r881983;
double r882031 = r882029 - r882030;
double r882032 = r882028 * r882031;
double r882033 = r882025 - r882032;
double r882034 = r881992 * r882009;
double r882035 = r881990 * r882002;
double r882036 = r882034 - r882035;
double r882037 = r882019 * r881997;
double r882038 = r882021 * r881995;
double r882039 = r882037 - r882038;
double r882040 = r882036 * r882039;
double r882041 = r882033 + r882040;
double r882042 = 7.027026353257974e-32;
bool r882043 = r881973 <= r882042;
double r882044 = r881976 * r882009;
double r882045 = r881979 * r882002;
double r882046 = r882044 - r882045;
double r882047 = r881995 * r881985;
double r882048 = r881997 * r881983;
double r882049 = r882047 - r882048;
double r882050 = r882046 * r882049;
double r882051 = r882001 + r882050;
double r882052 = r882051 + r882024;
double r882053 = r882052 - r882032;
double r882054 = r881990 * r882021;
double r882055 = r882002 * r882054;
double r882056 = r881992 * r882021;
double r882057 = r882009 * r882056;
double r882058 = r882055 - r882057;
double r882059 = r881995 * r882058;
double r882060 = r881990 * r882019;
double r882061 = r882002 * r882060;
double r882062 = r881997 * r882061;
double r882063 = r882059 - r882062;
double r882064 = r882053 + r882063;
double r882065 = 9.341341777997811e+101;
bool r882066 = r881973 <= r882065;
double r882067 = cbrt(r881989);
double r882068 = r882067 * r882067;
double r882069 = r882068 * r882067;
double r882070 = r882069 - r882000;
double r882071 = r882070 + r882024;
double r882072 = r882071 - r882032;
double r882073 = r882072 + r882040;
double r882074 = 1.59439582076308e+186;
bool r882075 = r881973 <= r882074;
double r882076 = cbrt(r882050);
double r882077 = cbrt(r882049);
double r882078 = r882077 * r882077;
double r882079 = r882046 * r882078;
double r882080 = r882079 * r882077;
double r882081 = cbrt(r882080);
double r882082 = r882076 * r882081;
double r882083 = r882082 * r882076;
double r882084 = r882001 + r882083;
double r882085 = r882084 + r882024;
double r882086 = r882085 - r882032;
double r882087 = r882086 + r882040;
double r882088 = r882075 ? r882064 : r882087;
double r882089 = r882066 ? r882073 : r882088;
double r882090 = r882043 ? r882064 : r882089;
double r882091 = r881975 ? r882041 : r882090;
return r882091;
}




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.2 |
|---|---|
| Target | 31.0 |
| Herbie | 30.1 |
if b < -8.581980755150202e-119Initial program 26.9
Taylor expanded around inf 29.6
if -8.581980755150202e-119 < b < 7.027026353257974e-32 or 9.341341777997811e+101 < b < 1.59439582076308e+186Initial program 27.0
Taylor expanded around inf 30.1
Simplified30.1
if 7.027026353257974e-32 < b < 9.341341777997811e+101Initial program 25.5
rmApplied add-cube-cbrt25.6
Taylor expanded around 0 30.0
if 1.59439582076308e+186 < b Initial program 34.7
rmApplied add-cube-cbrt34.7
rmApplied add-cube-cbrt34.8
Applied associate-*r*34.7
Final simplification30.1
herbie shell --seed 2020042
(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)))))