# HG changeset patch # User jwe # Date 1099584910 0 # Node ID 1c4a00f4bfb9b0701fcf1096760684372cd88031 # Parent 4114f428d68287d4dfd8dc74257403ec1f9dd3b8 [project @ 2004-11-04 16:15:10 by jwe] diff -r 4114f428d682 -r 1c4a00f4bfb9 src/ChangeLog --- 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 + + * DLD-FUNCTIONS/inv.cc (Finv): Declare rcond volatile and check value. + * DLD-FUNCTIONS/det.cc (Fdet): Likewise. + 2004-11-03 John W. Eaton * data.cc (Fsize): Return 1 if requested dimension is larger than diff -r 4114f428d682 -r 1c4a00f4bfb9 src/DLD-FUNCTIONS/det.cc --- 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 ()); } } } diff -r 4114f428d682 -r 1c4a00f4bfb9 src/DLD-FUNCTIONS/inv.cc --- 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); }