changeset 3826:2184d16975a2

[project @ 2001-05-02 05:01:31 by jwe]
author jwe
date Wed, 02 May 2001 05:01:31 +0000
parents 74255bd05bdd
children ba548facf43b
files src/ChangeLog src/DLD-FUNCTIONS/sort.cc
diffstat 2 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Thu Apr 26 19:50:03 2001 +0000
+++ b/src/ChangeLog	Wed May 02 05:01:31 2001 +0000
@@ -1,3 +1,7 @@
+2001-04-27  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* DLD-FUNCTIONS/sort.cc (mx_sort): Check for NaNs in comparisons.
+
 2001-04-26  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* Makefile.in (OCTAVE_LIBS): Delete $(LIBREADLINE) from the list.
--- a/src/DLD-FUNCTIONS/sort.cc	Thu Apr 26 19:50:03 2001 +0000
+++ b/src/DLD-FUNCTIONS/sort.cc	Wed May 02 05:01:31 2001 +0000
@@ -24,6 +24,8 @@
 #include <config.h>
 #endif
 
+#include "lo-mappers.h"
+
 #include "defun-dld.h"
 #include "error.h"
 #include "gripes.h"
@@ -175,7 +177,7 @@
 	{
 	  Array<int> l = create_index_array (nr);
 
-	  DO_SORT (nr, (m (p-1, j) > m (q-1, j)));
+	  DO_SORT (nr, (xisnan (m (p-1, j)) || m (p-1, j) > m (q-1, j)));
 
 	  MATRIX_CREATE_RETURN_VALUES (ms, m);
 	}
@@ -208,7 +210,7 @@
     {
       Array<int> l = create_index_array (n);
 
-      DO_SORT (n, (v (p-1) > v (q-1)));
+      DO_SORT (n, (xisnan (v (p-1)) || v (p-1) > v (q-1)));
 
       VECTOR_CREATE_RETURN_VALUES (vs, v);
     }
@@ -243,16 +245,18 @@
 	{
 	  Array<int> l = create_index_array (nr);
 
-	  int all_elts_real = 1;
+	  bool all_elts_real = true;
 	  for (int i = 0; i < nr; i++)
 	    if (imag (cm (i, j)) != 0.0)
 	      {
-		all_elts_real = 0;
+		all_elts_real = false;
 		break;
 	      }
 
 	  DO_SORT (nr, ((all_elts_real
-			 && real (cm (p-1, j)) > real (cm (q-1, j)))
+			 && (xisnan (real (cm (p-1, j)))
+			     || real (cm (p-1, j)) > real (cm (q-1, j))))
+			|| xisnan (cm (p-1, j))
 			|| abs (cm (p-1, j)) > abs (cm (q-1, j))));
 
 	  MATRIX_CREATE_RETURN_VALUES (cms, cm);
@@ -286,16 +290,18 @@
     {
       Array<int> l = create_index_array (n);
 
-      int all_elts_real = 1;
+      bool all_elts_real = true;
       for (int i = 0; i < n; i++)
 	if (imag (cv (i)) != 0.0)
 	  {
-	    all_elts_real = 0;
+	    all_elts_real = false;
 	    break;
 	  }
 
       DO_SORT (n, ((all_elts_real
-		    && real (cv (p-1)) > real (cv (q-1)))
+		    && (xisnan (real (cv (p-1)))
+			|| real (cv (p-1)) > real (cv (q-1))))
+		   || xisnan (cv (p-1))
 		   || abs (cv (p-1)) > abs (cv (q-1))));
 
       VECTOR_CREATE_RETURN_VALUES (cvs, cv);