95#define ALWAYS_USE_TEMPLATE_PAR_AS_FUN_PAR
97#ifndef ALWAYS_USE_TEMPLATE_PAR_AS_FUN_PAR
99template <
class M,
class X>
103 template <
class M,
class X>
120 return mi.ac(0, 0) * mi.ac(1, 1) - mi.ac(0, 1) * mi.ac(1, 0);
122 return mi.ac(0, 0) * mi.ac(1, 1) * mi.ac(2, 2) +
123 mi.ac(0, 2) * mi.ac(1, 0) * mi.ac(2, 1) +
124 mi.ac(0, 1) * mi.ac(1, 2) * mi.ac(2, 0) -
125 mi.ac(0, 2) * mi.ac(1, 1) * mi.ac(2, 0) -
126 mi.ac(0, 0) * mi.ac(1, 2) * mi.ac(2, 1) -
127 mi.ac(0, 1) * mi.ac(1, 0) * mi.ac(2, 2);
131 for (nr = 0; nr < q; nr++) {
134 for (nr1 = nr; nr1 < q; nr1++) {
135 if (
fabs(mi.ac(nr1, nr)) > d) {
136 d =
fabs(mi.ac(nr1, nr));
144 return koef * mi.ac(nmax, nr);
147 for (nc = nr; nc < q; nc++) {
149 mi.ac(nr, nc) = mi.ac(nmax, nc);
155 for (nr1 = nr + 1; nr1 < q; nr1++) {
156 X k(mi.ac(nr1, nr) / t);
159 for (nc = nr; nc < q; nc++) {
160 mi.ac(nr1, nc) -= k * mi.ac(nr, nc);
165 for (nc = nr; nc < q; nc++) {
DoubleAc fabs(const DoubleAc &f)
X abstract_determinant(M &mi, long q, X)