diff src/rand.cc @ 1086:75fc98220389

[project @ 1995-01-31 04:17:15 by jwe]
author jwe
date Tue, 31 Jan 1995 04:17:15 +0000
parents 705c8ac6bcd4
children b6360f2d4fa6
line wrap: on
line diff
--- a/src/rand.cc
+++ b/src/rand.cc
@@ -185,22 +185,31 @@
 	}
       else if (tmp.is_scalar_type ())
 	{
-	  m = n = NINT (tmp.double_value ());
+	  double dval = tmp.double_value ();
 
-	  if (! error_state)
-	    goto gen_matrix;
+	  if (xisnan (dval))
+	    {
+	      error ("rand: NaN is invalid a matrix dimension");
+	    }
+	  else
+	    {
+	      m = n = NINT (tmp.double_value ());
+
+	      if (! error_state)
+		goto gen_matrix;
+	    }
 	}
       else if (tmp.is_range ())
 	{
 	  Range r = tmp.range_value ();
 	  n = 1;
-	  m = NINT (r.nelem ());
+	  m = r.nelem ();
 	  goto gen_matrix;
 	}
       else if (tmp.is_matrix_type ())
 	{
-	  n = NINT (args(0).rows ());
-	  m = NINT (args(0).columns ());
+	  n = args(0).rows ();
+	  m = args(0).columns ();
 	  goto gen_matrix;
 	}
       else
@@ -221,14 +230,23 @@
 	}
       else
 	{
-	  n = NINT (args(0).double_value ());
+	  double dval = args(0).double_value ();
 
-	  if (! error_state)
+	  if (xisnan (dval))
 	    {
-	      m = NINT (args(1).double_value ());
+	      error ("rand: NaN is invalid as a matrix dimension");
+	    }
+	  else
+	    {
+	      n = NINT (dval);
 
 	      if (! error_state)
-		goto gen_matrix;
+		{
+		  m = NINT (args(1).double_value ());
+
+		  if (! error_state)
+		    goto gen_matrix;
+		}
 	    }
 	}
     }