Mercurial > hg > octave-nkf
changeset 20175:40b2c4323c16
avoid some code duplication in complex comparison functions (bug #44206)
* Array-C.cc (nan_ascending_compare): Don't duplicate operator < here.
(nan_descending_compare): Likewise, for operator >.
* Array-fC.cc (nan_ascending_compare): Likewise.
(nan_descending_compare): Likewise.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 19 Mar 2015 12:25:28 -0400 |
parents | d20dd211cc89 |
children | 3cc0734283dc |
files | liboctave/array/Array-C.cc liboctave/array/Array-fC.cc |
diffstat | 2 files changed, 4 insertions(+), 78 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/Array-C.cc +++ b/liboctave/array/Array-C.cc @@ -46,49 +46,13 @@ static bool nan_ascending_compare (const Complex& x, const Complex& y) { - if (xisnan (y)) - return (! xisnan (x)); - - double xabs = std::abs (x); - double yabs = std::abs (y); - - if (xabs < yabs) - return true; - else if (xabs == yabs) - { - double xarg = arg (x); - double yarg = arg (y); - xarg = (xarg == -M_PI) ? M_PI : xarg; - yarg = (yarg == -M_PI) ? M_PI : yarg; - - return xarg < yarg; - } - else - return false; + return xisnan (y) ? ! xisnan (x) : x < y; } static bool nan_descending_compare (const Complex& x, const Complex& y) { - if (xisnan (x)) - return (! xisnan (y)); - - double xabs = std::abs (x); - double yabs = std::abs (y); - - if (xabs > yabs) - return true; - else if (xabs == yabs) - { - double xarg = arg (x); - double yarg = arg (y); - xarg = (xarg == -M_PI) ? M_PI : xarg; - yarg = (yarg == -M_PI) ? M_PI : yarg; - - return xarg > yarg; - } - else - return false; + return xisnan (x) ? ! xisnan (y) : x > y; } Array<Complex>::compare_fcn_type
--- a/liboctave/array/Array-fC.cc +++ b/liboctave/array/Array-fC.cc @@ -46,51 +46,13 @@ static bool nan_ascending_compare (const FloatComplex& x, const FloatComplex& y) { - if (xisnan (y)) - return (! xisnan (x)); - - float xabs = std::abs (x); - float yabs = std::abs (y); - - if (xabs < yabs) - return true; - else if (xabs == yabs) - { - float xarg = arg (x); - float yarg = arg (y); - xarg = (xarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI) - : xarg; - yarg = (yarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI) - : yarg; - return xarg < yarg; - } - else - return false; + return xisnan (y) ? ! xisnan (x) : x < y; } static bool nan_descending_compare (const FloatComplex& x, const FloatComplex& y) { - if (xisnan (x)) - return (! xisnan (y)); - - float xabs = std::abs (x); - float yabs = std::abs (y); - - if (xabs > yabs) - return true; - else if (xabs == yabs) - { - float xarg = arg (x); - float yarg = arg (y); - xarg = (xarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI) - : xarg; - yarg = (yarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI) - : yarg; - return xarg > yarg; - } - else - return false; + return xisnan (x) ? ! xisnan (y) : x > y; } Array<FloatComplex>::compare_fcn_type