diff src/ov-flt-cx-mat.cc @ 9825:7483fe200fab

narrow complex values with negative zero imaginary parts
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 13 Nov 2009 12:34:46 +0100
parents f80c566bc751
children 8d9e4752441a
line wrap: on
line diff
--- a/src/ov-flt-cx-mat.cc	Wed Nov 18 11:06:45 2009 +0100
+++ b/src/ov-flt-cx-mat.cc	Fri Nov 13 12:34:46 2009 +0100
@@ -71,28 +71,14 @@
 {
   octave_base_value *retval = 0;
 
-  if (matrix.ndims () == 2)
+  if (matrix.numel () == 1)
     {
-      FloatComplexMatrix cm = matrix.matrix_value ();
-
-      octave_idx_type nr = cm.rows ();
-      octave_idx_type nc = cm.cols ();
-
-      if (nr == 1 && nc == 1)
-	{
-	  FloatComplex c = matrix (0, 0);
+      FloatComplex c = matrix (0);
 
-	  float im = std::imag (c);
-
-	  if (im == 0.0 && ! lo_ieee_signbit (im))
-	    retval = new octave_float_scalar (std::real (c));
-	  else
-	    retval = new octave_float_complex (c);
-	}
-      else if (nr == 0 || nc == 0)
-	retval = new octave_float_matrix (FloatMatrix (nr, nc));
-      else if (cm.all_elements_are_real ())
-	retval = new octave_float_matrix (::real (cm));
+      if (std::imag (c) == 0.0)
+        retval = new octave_float_scalar (std::real (c));
+      else
+        retval = new octave_float_complex (c);
     }
   else if (matrix.all_elements_are_real ())
     retval = new octave_float_matrix (::real (matrix));