Mercurial > hg > octave-nkf
comparison liboctave/CMatrix.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 |
---|---|
1437 octave_idx_type nr = rows (); | 1437 octave_idx_type nr = rows (); |
1438 octave_idx_type nc = cols (); | 1438 octave_idx_type nc = cols (); |
1439 | 1439 |
1440 if (nr == 0 || nc == 0) | 1440 if (nr == 0 || nc == 0) |
1441 { | 1441 { |
1442 Complex d[2]; | 1442 retval = ComplexDET (1.0, 0); |
1443 d[0] = 1.0; | |
1444 d[1] = 0.0; | |
1445 retval = ComplexDET (d); | |
1446 } | 1443 } |
1447 else | 1444 else |
1448 { | 1445 { |
1449 Array<octave_idx_type> ipvt (nr); | 1446 Array<octave_idx_type> ipvt (nr); |
1450 octave_idx_type *pipvt = ipvt.fortran_vec (); | 1447 octave_idx_type *pipvt = ipvt.fortran_vec (); |
1498 info = -1; | 1495 info = -1; |
1499 retval = ComplexDET (); | 1496 retval = ComplexDET (); |
1500 } | 1497 } |
1501 else | 1498 else |
1502 { | 1499 { |
1503 Complex d[2] = { 1., 0.}; | 1500 Complex c = 1.0; |
1504 for (octave_idx_type i=0; i<nc; i++) | 1501 int e = 0; |
1502 | |
1503 for (octave_idx_type i = 0; i < nc; i++) | |
1505 { | 1504 { |
1506 if (ipvt(i) != (i+1)) d[0] = -d[0]; | 1505 if (ipvt(i) != (i+1)) |
1507 d[0] = d[0] * atmp(i,i); | 1506 c = -c; |
1508 if (d[0] == 0.) break; | 1507 |
1509 while (std::abs(d[0]) < 1.) | 1508 c *= atmp(i,i); |
1509 | |
1510 if (c == 0.0) | |
1511 break; | |
1512 | |
1513 while (std::abs(c) < 0.5) | |
1510 { | 1514 { |
1511 d[0] = 10. * d[0]; | 1515 c *= 2.0; |
1512 d[1] = d[1] - 1.0; | 1516 e--; |
1513 } | 1517 } |
1514 while (std::abs(d[0]) >= 10.) | 1518 |
1519 while (std::abs(c) >= 2.0) | |
1515 { | 1520 { |
1516 d[0] = 0.1 * d[0]; | 1521 c /= 2.0; |
1517 d[1] = d[1] + 1.0; | 1522 e++; |
1518 } | 1523 } |
1519 } | 1524 } |
1520 retval = ComplexDET (d); | 1525 |
1526 retval = ComplexDET (c, e); | |
1521 } | 1527 } |
1522 } | 1528 } |
1523 } | 1529 } |
1524 } | 1530 } |
1525 | 1531 |