# HG changeset patch # User jwe # Date 1045853947 0 # Node ID a6c22c2c9b097e8baa145cfc79d0d29d4e76bcd1 # Parent 05415e529cef5dc854020a710cc0f8ae452091a5 [project @ 2003-02-21 18:59:07 by jwe] diff -r 05415e529cef -r a6c22c2c9b09 ChangeLog --- a/ChangeLog Fri Feb 21 06:22:48 2003 +0000 +++ b/ChangeLog Fri Feb 21 18:59:07 2003 +0000 @@ -1,3 +1,7 @@ +2003-02-21 John W. Eaton + + * configure.in: Check for copysign and signbit. + 2003-02-18 John W. Eaton * emacs/Makefile.in (DISTFILES): Add otags.1 to the list. diff -r 05415e529cef -r a6c22c2c9b09 configure.in --- a/configure.in Fri Feb 21 06:22:48 2003 +0000 +++ b/configure.in Fri Feb 21 18:59:07 2003 +0000 @@ -22,7 +22,7 @@ ### 02111-1307, USA. AC_INIT -AC_REVISION($Revision: 1.413 $) +AC_REVISION($Revision: 1.414 $) AC_PREREQ(2.52) AC_CONFIG_SRCDIR([src/octave.cc]) AC_CONFIG_HEADER(config.h) @@ -1101,7 +1101,7 @@ AC_DEFINE(HAVE_ISNAN, 1, [Define if you have isnan().]) ;; *) - AC_CHECK_FUNCS(finite isnan isinf) + AC_CHECK_FUNCS(finite isnan isinf copysign signbit) ;; esac diff -r 05415e529cef -r a6c22c2c9b09 liboctave/CMatrix.cc --- a/liboctave/CMatrix.cc Fri Feb 21 06:22:48 2003 +0000 +++ b/liboctave/CMatrix.cc Fri Feb 21 18:59:07 2003 +0000 @@ -2487,9 +2487,15 @@ int nc = cols (); for (int j = 0; j < nc; j++) - for (int i = 0; i < nr; i++) - if (imag (elem (i, j)) != 0.0) - return false; + { + for (int i = 0; i < nr; i++) + { + double ip = imag (elem (i, j)); + + if (ip != 0.0 || lo_ieee_signbit (ip)) + return false; + } + } return true; } diff -r 05415e529cef -r a6c22c2c9b09 liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Feb 21 06:22:48 2003 +0000 +++ b/liboctave/ChangeLog Fri Feb 21 18:59:07 2003 +0000 @@ -1,3 +1,10 @@ +2003-02-21 John W. Eaton + + * CMatrix.cc (ComplexMatrix::all_elements_are_real): Don't lose -0 + imaginary parts. + + * lo-ieee.h (lo_ieee_signbit): New macro. + 2003-02-18 David Bateman * dMatrix.cc (Matrix::inverse, Matrix::determinant, Matrix::solve): diff -r 05415e529cef -r a6c22c2c9b09 liboctave/lo-ieee.h --- a/liboctave/lo-ieee.h Fri Feb 21 06:22:48 2003 +0000 +++ b/liboctave/lo-ieee.h Fri Feb 21 18:59:07 2003 +0000 @@ -66,6 +66,22 @@ extern double lo_ieee_na_value (void); extern double lo_ieee_nan_value (void); +// In the following definitions, only check x < 0 explicitly to avoid +// a function call when it looks like signbit or copysign are actually +// functions. + +#if defined (signbit) +#define lo_ieee_signbit(x) signbit (x) +#elif defined (HAVE_SIGNBIT) +#define lo_ieee_signbit(x) (x < 0 || signbit (x)) +#elif defined (copysign) +#define lo_ieee_signbit(x) (copysign (1.0, x) < 0) +#elif defined (HAVE_COPYSIGN) +#define lo_ieee_signbit(x) (x < 0 || copysign (1.0, x) < 0) +#else +#define lo_ieee_signbit(x) 0 +#endif + #ifdef __cplusplus } #endif diff -r 05415e529cef -r a6c22c2c9b09 src/pr-output.cc --- a/src/pr-output.cc Fri Feb 21 06:22:48 2003 +0000 +++ b/src/pr-output.cc Fri Feb 21 18:59:07 2003 +0000 @@ -1188,7 +1188,7 @@ if (! bank_format) { double i = tmp.imag (); - if (! (hex_format || bit_format) && i < 0) + if (! (hex_format || bit_format) && lo_ieee_signbit (i)) { os << " - "; i = -i;