Mercurial > octave
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));