\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}\;k \le -5.368824232414785634330611155838197389832 \cdot 10^{-40}:\\
\;\;\;\;\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(\left(\left(x \cdot y2 - z \cdot y3\right) \cdot y0\right) \cdot c + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(-y1 \cdot a\right)\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}\;k \le -3.837734340409034693594451806420869680277 \cdot 10^{-190}:\\
\;\;\;\;\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(\left(\left(x \cdot y2 - z \cdot y3\right) \cdot y0\right) \cdot c + \left(\left(x \cdot y2 - z \cdot y3\right) \cdot \left(-y1\right)\right) \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}\;k \le 4.085379111073638406823244622669453896403 \cdot 10^{-15}:\\
\;\;\;\;\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(\left(\left(x \cdot y2 - z \cdot y3\right) \cdot y0\right) \cdot c + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(-y1 \cdot a\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) + \mathsf{fma}\left(y0, y3 \cdot \left(j \cdot y5\right), -\mathsf{fma}\left(y0, y2 \cdot \left(k \cdot y5\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) + \left(\left(\left(x \cdot y2 - z \cdot y3\right) \cdot y0\right) \cdot c + \left(x \cdot y2 - z \cdot y3\right) \cdot \left(-y1 \cdot a\right)\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)\\
\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 r902769 = x;
double r902770 = y;
double r902771 = r902769 * r902770;
double r902772 = z;
double r902773 = t;
double r902774 = r902772 * r902773;
double r902775 = r902771 - r902774;
double r902776 = a;
double r902777 = b;
double r902778 = r902776 * r902777;
double r902779 = c;
double r902780 = i;
double r902781 = r902779 * r902780;
double r902782 = r902778 - r902781;
double r902783 = r902775 * r902782;
double r902784 = j;
double r902785 = r902769 * r902784;
double r902786 = k;
double r902787 = r902772 * r902786;
double r902788 = r902785 - r902787;
double r902789 = y0;
double r902790 = r902789 * r902777;
double r902791 = y1;
double r902792 = r902791 * r902780;
double r902793 = r902790 - r902792;
double r902794 = r902788 * r902793;
double r902795 = r902783 - r902794;
double r902796 = y2;
double r902797 = r902769 * r902796;
double r902798 = y3;
double r902799 = r902772 * r902798;
double r902800 = r902797 - r902799;
double r902801 = r902789 * r902779;
double r902802 = r902791 * r902776;
double r902803 = r902801 - r902802;
double r902804 = r902800 * r902803;
double r902805 = r902795 + r902804;
double r902806 = r902773 * r902784;
double r902807 = r902770 * r902786;
double r902808 = r902806 - r902807;
double r902809 = y4;
double r902810 = r902809 * r902777;
double r902811 = y5;
double r902812 = r902811 * r902780;
double r902813 = r902810 - r902812;
double r902814 = r902808 * r902813;
double r902815 = r902805 + r902814;
double r902816 = r902773 * r902796;
double r902817 = r902770 * r902798;
double r902818 = r902816 - r902817;
double r902819 = r902809 * r902779;
double r902820 = r902811 * r902776;
double r902821 = r902819 - r902820;
double r902822 = r902818 * r902821;
double r902823 = r902815 - r902822;
double r902824 = r902786 * r902796;
double r902825 = r902784 * r902798;
double r902826 = r902824 - r902825;
double r902827 = r902809 * r902791;
double r902828 = r902811 * r902789;
double r902829 = r902827 - r902828;
double r902830 = r902826 * r902829;
double r902831 = r902823 + r902830;
return r902831;
}
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 r902832 = k;
double r902833 = -5.368824232414786e-40;
bool r902834 = r902832 <= r902833;
double r902835 = x;
double r902836 = y;
double r902837 = r902835 * r902836;
double r902838 = z;
double r902839 = t;
double r902840 = r902838 * r902839;
double r902841 = r902837 - r902840;
double r902842 = a;
double r902843 = b;
double r902844 = r902842 * r902843;
double r902845 = c;
double r902846 = i;
double r902847 = r902845 * r902846;
double r902848 = r902844 - r902847;
double r902849 = r902841 * r902848;
double r902850 = j;
double r902851 = r902835 * r902850;
double r902852 = r902838 * r902832;
double r902853 = r902851 - r902852;
double r902854 = y0;
double r902855 = r902854 * r902843;
double r902856 = y1;
double r902857 = r902856 * r902846;
double r902858 = r902855 - r902857;
double r902859 = r902853 * r902858;
double r902860 = r902849 - r902859;
double r902861 = y2;
double r902862 = r902835 * r902861;
double r902863 = y3;
double r902864 = r902838 * r902863;
double r902865 = r902862 - r902864;
double r902866 = r902865 * r902854;
double r902867 = r902866 * r902845;
double r902868 = r902856 * r902842;
double r902869 = -r902868;
double r902870 = r902865 * r902869;
double r902871 = r902867 + r902870;
double r902872 = r902860 + r902871;
double r902873 = y5;
double r902874 = r902836 * r902873;
double r902875 = r902846 * r902874;
double r902876 = r902850 * r902873;
double r902877 = r902846 * r902876;
double r902878 = y4;
double r902879 = r902836 * r902843;
double r902880 = r902878 * r902879;
double r902881 = r902832 * r902880;
double r902882 = fma(r902839, r902877, r902881);
double r902883 = -r902882;
double r902884 = fma(r902832, r902875, r902883);
double r902885 = r902872 + r902884;
double r902886 = r902839 * r902861;
double r902887 = r902836 * r902863;
double r902888 = r902886 - r902887;
double r902889 = r902878 * r902845;
double r902890 = r902873 * r902842;
double r902891 = r902889 - r902890;
double r902892 = r902888 * r902891;
double r902893 = r902885 - r902892;
double r902894 = r902832 * r902861;
double r902895 = r902850 * r902863;
double r902896 = r902894 - r902895;
double r902897 = r902878 * r902856;
double r902898 = r902873 * r902854;
double r902899 = r902897 - r902898;
double r902900 = r902896 * r902899;
double r902901 = r902893 + r902900;
double r902902 = -3.8377343404090347e-190;
bool r902903 = r902832 <= r902902;
double r902904 = -r902856;
double r902905 = r902865 * r902904;
double r902906 = r902905 * r902842;
double r902907 = r902867 + r902906;
double r902908 = r902860 + r902907;
double r902909 = r902839 * r902850;
double r902910 = r902836 * r902832;
double r902911 = r902909 - r902910;
double r902912 = r902878 * r902843;
double r902913 = r902873 * r902846;
double r902914 = r902912 - r902913;
double r902915 = r902911 * r902914;
double r902916 = r902908 + r902915;
double r902917 = r902916 - r902892;
double r902918 = r902917 + r902900;
double r902919 = 4.0853791110736384e-15;
bool r902920 = r902832 <= r902919;
double r902921 = r902872 + r902915;
double r902922 = r902921 - r902892;
double r902923 = r902863 * r902876;
double r902924 = r902832 * r902873;
double r902925 = r902861 * r902924;
double r902926 = r902850 * r902878;
double r902927 = r902863 * r902926;
double r902928 = r902856 * r902927;
double r902929 = fma(r902854, r902925, r902928);
double r902930 = -r902929;
double r902931 = fma(r902854, r902923, r902930);
double r902932 = r902922 + r902931;
double r902933 = r902920 ? r902932 : r902901;
double r902934 = r902903 ? r902918 : r902933;
double r902935 = r902834 ? r902901 : r902934;
return r902935;
}




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.5 |
|---|---|
| Target | 31.2 |
| Herbie | 28.3 |
if k < -5.368824232414786e-40 or 4.0853791110736384e-15 < k Initial program 28.2
rmApplied sub-neg28.2
Applied distribute-lft-in28.2
rmApplied associate-*r*28.1
Taylor expanded around inf 28.1
Simplified28.1
if -5.368824232414786e-40 < k < -3.8377343404090347e-190Initial program 26.4
rmApplied sub-neg26.4
Applied distribute-lft-in26.4
rmApplied associate-*r*27.0
rmApplied distribute-lft-neg-in27.0
Applied associate-*r*27.5
if -3.8377343404090347e-190 < k < 4.0853791110736384e-15Initial program 27.3
rmApplied sub-neg27.3
Applied distribute-lft-in27.3
rmApplied associate-*r*27.9
Taylor expanded around inf 28.7
Simplified28.7
Final simplification28.3
herbie shell --seed 2019362 +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)))))