diff liboctave/fCMatrix.cc @ 8335:64cf956a109c

templatize & fix DET
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 19 Nov 2008 11:23:07 +0100
parents 851803f7bb4d
children 9813c07ca946
line wrap: on
line diff
--- a/liboctave/fCMatrix.cc
+++ b/liboctave/fCMatrix.cc
@@ -38,7 +38,7 @@
 
 #include "Array-util.h"
 #include "fCMatrix.h"
-#include "fCmplxDET.h"
+#include "DET.h"
 #include "fCmplxSCHUR.h"
 #include "fCmplxSVD.h"
 #include "fCmplxCHOL.h"
@@ -1624,33 +1624,13 @@
 	    } 
 	  else 
 	    {
-	      FloatComplex c = 1.0;
-	      int e = 0;
-
+              retval = FloatComplexDET (1.0);
+              
 	      for (octave_idx_type i = 0; i < nc; i++) 
 		{
-		  if (ipvt(i) != (i+1))
-		    c = -c;
-
-		  c *= atmp(i,i);
-
-		  if (c == static_cast<float> (0.0))
-		    break;
-
-		  while (std::abs(c) < 0.5)
-		    {
-		      c *= 2.0;
-		      e--;
-		    }
-
-		  while (std::abs(c) >= 2.0)
-		    {
-		      c /= 2.0;
-		      e++;
-		    }
-		}
-
-	      retval = FloatComplexDET (c, e);
+                  FloatComplex c = atmp(i,i);
+                  retval *= (ipvt(i) != (i+1)) ? -c : c;
+                }
 	    }
 	}
     }