diff 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
line wrap: on
line diff
--- a/liboctave/dMatrix.cc
+++ b/liboctave/dMatrix.cc
@@ -1102,10 +1102,7 @@
 
   if (nr == 0 || nc == 0)
     {
-      double d[2];
-      d[0] = 1.0;
-      d[1] = 0.0;
-      retval = DET (d);
+      retval = DET (1.0, 0);
     }
   else
     {
@@ -1163,24 +1160,33 @@
 		} 
 	      else 
 		{
-		  double d[2] = { 1., 0.};
-		  for (octave_idx_type i=0; i<nc; i++) 
+		  double c = 1.0;
+		  int e = 0;
+
+		  for (octave_idx_type i = 0; i < nc; i++) 
 		    {
-		      if (ipvt(i) != (i+1)) d[0] = -d[0];
-		      d[0] *= atmp(i,i);
-		      if (d[0] == 0.) break;
-		      while (fabs(d[0]) < 1.) 
+		      if (ipvt(i) != (i+1))
+			c = -c;
+
+		      c *= atmp(i,i);
+
+		      if (c == 0.0)
+			break;
+
+		      while (fabs (c) < 0.5)
 			{
-			  d[0] = 10. * d[0];
-			  d[1] = d[1] - 1.0;
+			  c *= 2.0;
+			  e--;
 			}
-		      while (fabs(d[0]) >= 10.) 
+
+		      while (fabs (c) >= 2.0)
 			{
-			  d[0] = 0.1 * d[0];
-			  d[1] = d[1] + 1.0;
+			  c /= 2.0;
+			  e++;
 			}
 		    }
-		  retval = DET (d);
+
+		  retval = DET (c, e);
 		}
 	    }
 	}