\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}\;y4 \le -5.78947116530490396 \cdot 10^{-241}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot y - z \cdot t\right) \cdot \left(a \cdot b - c \cdot i\right) - \left(k \cdot \left(i \cdot \left(z \cdot y1\right)\right) - \left(i \cdot \left(j \cdot \left(y1 \cdot x\right)\right) + y0 \cdot \left(z \cdot \left(k \cdot b\right)\right)\right)\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)\\
\mathbf{elif}\;y4 \le 6.7251934755243073 \cdot 10^{-133}:\\
\;\;\;\;\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(k \cdot \left(i \cdot \left(y \cdot y5\right)\right) - \left(t \cdot \left(i \cdot \left(j \cdot y5\right)\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}\;y4 \le 1.0410960937213773 \cdot 10^{-36}:\\
\;\;\;\;\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)\right) - \left(y0 \cdot \left(y2 \cdot \left(k \cdot y5\right)\right) + y1 \cdot \left(y3 \cdot \left(j \cdot y4\right)\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) + 0\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 r638781 = x;
double r638782 = y;
double r638783 = r638781 * r638782;
double r638784 = z;
double r638785 = t;
double r638786 = r638784 * r638785;
double r638787 = r638783 - r638786;
double r638788 = a;
double r638789 = b;
double r638790 = r638788 * r638789;
double r638791 = c;
double r638792 = i;
double r638793 = r638791 * r638792;
double r638794 = r638790 - r638793;
double r638795 = r638787 * r638794;
double r638796 = j;
double r638797 = r638781 * r638796;
double r638798 = k;
double r638799 = r638784 * r638798;
double r638800 = r638797 - r638799;
double r638801 = y0;
double r638802 = r638801 * r638789;
double r638803 = y1;
double r638804 = r638803 * r638792;
double r638805 = r638802 - r638804;
double r638806 = r638800 * r638805;
double r638807 = r638795 - r638806;
double r638808 = y2;
double r638809 = r638781 * r638808;
double r638810 = y3;
double r638811 = r638784 * r638810;
double r638812 = r638809 - r638811;
double r638813 = r638801 * r638791;
double r638814 = r638803 * r638788;
double r638815 = r638813 - r638814;
double r638816 = r638812 * r638815;
double r638817 = r638807 + r638816;
double r638818 = r638785 * r638796;
double r638819 = r638782 * r638798;
double r638820 = r638818 - r638819;
double r638821 = y4;
double r638822 = r638821 * r638789;
double r638823 = y5;
double r638824 = r638823 * r638792;
double r638825 = r638822 - r638824;
double r638826 = r638820 * r638825;
double r638827 = r638817 + r638826;
double r638828 = r638785 * r638808;
double r638829 = r638782 * r638810;
double r638830 = r638828 - r638829;
double r638831 = r638821 * r638791;
double r638832 = r638823 * r638788;
double r638833 = r638831 - r638832;
double r638834 = r638830 * r638833;
double r638835 = r638827 - r638834;
double r638836 = r638798 * r638808;
double r638837 = r638796 * r638810;
double r638838 = r638836 - r638837;
double r638839 = r638821 * r638803;
double r638840 = r638823 * r638801;
double r638841 = r638839 - r638840;
double r638842 = r638838 * r638841;
double r638843 = r638835 + r638842;
return r638843;
}
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 r638844 = y4;
double r638845 = -5.789471165304904e-241;
bool r638846 = r638844 <= r638845;
double r638847 = x;
double r638848 = y;
double r638849 = r638847 * r638848;
double r638850 = z;
double r638851 = t;
double r638852 = r638850 * r638851;
double r638853 = r638849 - r638852;
double r638854 = a;
double r638855 = b;
double r638856 = r638854 * r638855;
double r638857 = c;
double r638858 = i;
double r638859 = r638857 * r638858;
double r638860 = r638856 - r638859;
double r638861 = r638853 * r638860;
double r638862 = k;
double r638863 = y1;
double r638864 = r638850 * r638863;
double r638865 = r638858 * r638864;
double r638866 = r638862 * r638865;
double r638867 = j;
double r638868 = r638863 * r638847;
double r638869 = r638867 * r638868;
double r638870 = r638858 * r638869;
double r638871 = y0;
double r638872 = r638862 * r638855;
double r638873 = r638850 * r638872;
double r638874 = r638871 * r638873;
double r638875 = r638870 + r638874;
double r638876 = r638866 - r638875;
double r638877 = r638861 - r638876;
double r638878 = y2;
double r638879 = r638847 * r638878;
double r638880 = y3;
double r638881 = r638850 * r638880;
double r638882 = r638879 - r638881;
double r638883 = r638871 * r638857;
double r638884 = r638863 * r638854;
double r638885 = r638883 - r638884;
double r638886 = r638882 * r638885;
double r638887 = r638877 + r638886;
double r638888 = r638851 * r638867;
double r638889 = r638848 * r638862;
double r638890 = r638888 - r638889;
double r638891 = r638844 * r638855;
double r638892 = y5;
double r638893 = r638892 * r638858;
double r638894 = r638891 - r638893;
double r638895 = r638890 * r638894;
double r638896 = r638887 + r638895;
double r638897 = r638851 * r638878;
double r638898 = r638848 * r638880;
double r638899 = r638897 - r638898;
double r638900 = r638844 * r638857;
double r638901 = r638892 * r638854;
double r638902 = r638900 - r638901;
double r638903 = r638899 * r638902;
double r638904 = r638896 - r638903;
double r638905 = r638862 * r638878;
double r638906 = r638867 * r638880;
double r638907 = r638905 - r638906;
double r638908 = r638844 * r638863;
double r638909 = r638892 * r638871;
double r638910 = r638908 - r638909;
double r638911 = r638907 * r638910;
double r638912 = r638904 + r638911;
double r638913 = 6.725193475524307e-133;
bool r638914 = r638844 <= r638913;
double r638915 = r638847 * r638867;
double r638916 = r638850 * r638862;
double r638917 = r638915 - r638916;
double r638918 = r638871 * r638855;
double r638919 = r638863 * r638858;
double r638920 = r638918 - r638919;
double r638921 = r638917 * r638920;
double r638922 = r638861 - r638921;
double r638923 = r638922 + r638886;
double r638924 = r638848 * r638892;
double r638925 = r638858 * r638924;
double r638926 = r638862 * r638925;
double r638927 = r638867 * r638892;
double r638928 = r638858 * r638927;
double r638929 = r638851 * r638928;
double r638930 = r638848 * r638855;
double r638931 = r638844 * r638930;
double r638932 = r638862 * r638931;
double r638933 = r638929 + r638932;
double r638934 = r638926 - r638933;
double r638935 = r638923 + r638934;
double r638936 = r638935 - r638903;
double r638937 = r638936 + r638911;
double r638938 = 1.0410960937213773e-36;
bool r638939 = r638844 <= r638938;
double r638940 = r638923 + r638895;
double r638941 = r638940 - r638903;
double r638942 = r638880 * r638927;
double r638943 = r638871 * r638942;
double r638944 = r638862 * r638892;
double r638945 = r638878 * r638944;
double r638946 = r638871 * r638945;
double r638947 = r638867 * r638844;
double r638948 = r638880 * r638947;
double r638949 = r638863 * r638948;
double r638950 = r638946 + r638949;
double r638951 = r638943 - r638950;
double r638952 = r638941 + r638951;
double r638953 = 0.0;
double r638954 = r638922 + r638953;
double r638955 = r638954 + r638895;
double r638956 = r638955 - r638903;
double r638957 = r638956 + r638911;
double r638958 = r638939 ? r638952 : r638957;
double r638959 = r638914 ? r638937 : r638958;
double r638960 = r638846 ? r638912 : r638959;
return r638960;
}




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 | 26.9 |
|---|---|
| Target | 30.5 |
| Herbie | 28.9 |
if y4 < -5.789471165304904e-241Initial program 26.8
Taylor expanded around inf 29.0
if -5.789471165304904e-241 < y4 < 6.725193475524307e-133Initial program 26.5
Taylor expanded around inf 27.9
if 6.725193475524307e-133 < y4 < 1.0410960937213773e-36Initial program 25.0
Taylor expanded around inf 27.5
if 1.0410960937213773e-36 < y4 Initial program 28.3
Taylor expanded around 0 30.9
Final simplification28.9
herbie shell --seed 2020047
(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)))))