Mercurial > hg > octave-lyh
comparison liboctave/dMatrix.cc @ 5634:4b45b2bcda89
[project @ 2006-03-02 03:40:00 by jwe]
author | jwe |
---|---|
date | Thu, 02 Mar 2006 03:40:01 +0000 |
parents | 25c8956d2204 |
children | 34cda7d94c08 |
comparison
equal
deleted
inserted
replaced
5633:92f8b2723c8c | 5634:4b45b2bcda89 |
---|---|
1100 octave_idx_type nr = rows (); | 1100 octave_idx_type nr = rows (); |
1101 octave_idx_type nc = cols (); | 1101 octave_idx_type nc = cols (); |
1102 | 1102 |
1103 if (nr == 0 || nc == 0) | 1103 if (nr == 0 || nc == 0) |
1104 { | 1104 { |
1105 double d[2]; | 1105 retval = DET (1.0, 0); |
1106 d[0] = 1.0; | |
1107 d[1] = 0.0; | |
1108 retval = DET (d); | |
1109 } | 1106 } |
1110 else | 1107 else |
1111 { | 1108 { |
1112 Array<octave_idx_type> ipvt (nr); | 1109 Array<octave_idx_type> ipvt (nr); |
1113 octave_idx_type *pipvt = ipvt.fortran_vec (); | 1110 octave_idx_type *pipvt = ipvt.fortran_vec (); |
1161 info = -1; | 1158 info = -1; |
1162 retval = DET (); | 1159 retval = DET (); |
1163 } | 1160 } |
1164 else | 1161 else |
1165 { | 1162 { |
1166 double d[2] = { 1., 0.}; | 1163 double c = 1.0; |
1167 for (octave_idx_type i=0; i<nc; i++) | 1164 int e = 0; |
1165 | |
1166 for (octave_idx_type i = 0; i < nc; i++) | |
1168 { | 1167 { |
1169 if (ipvt(i) != (i+1)) d[0] = -d[0]; | 1168 if (ipvt(i) != (i+1)) |
1170 d[0] *= atmp(i,i); | 1169 c = -c; |
1171 if (d[0] == 0.) break; | 1170 |
1172 while (fabs(d[0]) < 1.) | 1171 c *= atmp(i,i); |
1172 | |
1173 if (c == 0.0) | |
1174 break; | |
1175 | |
1176 while (fabs (c) < 0.5) | |
1173 { | 1177 { |
1174 d[0] = 10. * d[0]; | 1178 c *= 2.0; |
1175 d[1] = d[1] - 1.0; | 1179 e--; |
1176 } | 1180 } |
1177 while (fabs(d[0]) >= 10.) | 1181 |
1182 while (fabs (c) >= 2.0) | |
1178 { | 1183 { |
1179 d[0] = 0.1 * d[0]; | 1184 c /= 2.0; |
1180 d[1] = d[1] + 1.0; | 1185 e++; |
1181 } | 1186 } |
1182 } | 1187 } |
1183 retval = DET (d); | 1188 |
1189 retval = DET (c, e); | |
1184 } | 1190 } |
1185 } | 1191 } |
1186 } | 1192 } |
1187 } | 1193 } |
1188 | 1194 |