changeset 5063:1c4a00f4bfb9

[project @ 2004-11-04 16:15:10 by jwe]
author jwe
date Thu, 04 Nov 2004 16:15:10 +0000
parents 4114f428d682
children a6755bc45f15
files src/ChangeLog src/DLD-FUNCTIONS/det.cc src/DLD-FUNCTIONS/inv.cc
diffstat 3 files changed, 19 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Nov 03 21:27:34 2004 +0000
+++ b/src/ChangeLog	Thu Nov 04 16:15:10 2004 +0000
@@ -1,3 +1,8 @@
+2004-11-04  John W. Eaton  <jwe@octave.org>
+
+	* DLD-FUNCTIONS/inv.cc (Finv): Declare rcond volatile and check	value.
+	* DLD-FUNCTIONS/det.cc (Fdet): Likewise.
+	
 2004-11-03  John W. Eaton  <jwe@octave.org>
 
 	* data.cc (Fsize): Return 1 if requested dimension is larger than
--- a/src/DLD-FUNCTIONS/det.cc	Wed Nov 03 21:27:34 2004 +0000
+++ b/src/DLD-FUNCTIONS/det.cc	Thu Nov 04 16:15:10 2004 +0000
@@ -80,19 +80,21 @@
       if (! error_state)
 	{
 	  int info;
-	  double rcond = 0.0;
+	  volatile double rcond = 0.0;
 
 
 	  if (nargout > 1)
 	    {
 	      DET det = m.determinant (info, rcond);
 	      retval(1) = rcond;
-	      retval(0) = (info == -1 ? 0.0 : det.value ());
+	      retval(0) = ((info == -1 || 1.0 + rcond == 1.0)
+			   ? 0.0 : det.value ());
 	    }
 	  else
 	    {
 	      DET det = m.determinant (info);
-	      retval(0) = (info == -1 ? 0.0 : det.value ());
+	      retval(0) = ((info == -1 || 1.0 + rcond == 1.0)
+			   ? 0.0 : det.value ());
 	    }
 	}
     }
@@ -103,18 +105,20 @@
       if (! error_state)
 	{
 	  int info;
-	  double rcond = 0.0;
+	  volatile double rcond = 0.0;
 
 	  if (nargout > 1)
 	    {
 	      ComplexDET det = m.determinant (info, rcond);
 	      retval(1) = rcond;
-	      retval(0) = (info == -1 ? Complex (0.0) : det.value ());
+	      retval(0) = ((info == -1 || 1.0 + rcond == 1.0)
+			   ? Complex (0.0) : det.value ());
 	    }
 	  else
 	    {
 	      ComplexDET det = m.determinant (info);
-	      retval(0) = (info == -1 ? Complex (0.0) : det.value ());
+	      retval(0) = ((info == -1 | 1.0 + rcond == 1.0)
+			   ? Complex (0.0) : det.value ());
 	    }
 	}
     }
--- a/src/DLD-FUNCTIONS/inv.cc	Wed Nov 03 21:27:34 2004 +0000
+++ b/src/DLD-FUNCTIONS/inv.cc	Thu Nov 04 16:15:10 2004 +0000
@@ -74,7 +74,7 @@
       if (! error_state)
 	{
 	  int info;
-	  double rcond = 0.0;
+	  volatile double rcond = 0.0;
 
 	  Matrix result = m.inverse (info, rcond, 1);
 
@@ -83,7 +83,7 @@
 
 	  retval(0) = result;
 
-	  if (nargout < 2 && info == -1)
+	  if (nargout < 2 && (info == -1 || 1.0 + rcond == 1.0))
 	    warning ("inverse: matrix singular to machine precision,\
  rcond = %g", rcond);
 	}
@@ -95,7 +95,7 @@
       if (! error_state)
 	{
 	  int info;
-	  double rcond = 0.0;
+	  volatile double rcond = 0.0;
 
 	  ComplexMatrix result = m.inverse (info, rcond, 1);
 
@@ -104,7 +104,7 @@
 
 	  retval(0) = result;
 
-	  if (nargout < 2 && info == -1)
+	  if (nargout < 2 && (info == -1 || 1.0 + rcond == 1.0))
 	    warning ("inverse: matrix singular to machine precision,\
  rcond = %g", rcond);
 	}