Mercurial > hg > octave-nkf
diff liboctave/array/Range.cc @ 19042:47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
* Range.h, Range.cc (Range::Range (double, double, double,
octave_idx_type): New protected constructor.
(operator -, operator +, operator *): Use new constructor.
(Range::Range (double, double, octave_idx_type): Also check that the
limit remains finite.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 20 Jun 2014 18:55:38 -0400 |
parents | 49a5a4be04a1 |
children | 4197fc428c7d |
line wrap: on
line diff
--- a/liboctave/array/Range.cc +++ b/liboctave/array/Range.cc @@ -387,12 +387,12 @@ Range operator - (const Range& r) { - return Range (-r.base (), -r.inc (), r.nelem ()); + return Range (-r.base (), -r.limit (), -r.inc (), r.nelem ()); } Range operator + (double x, const Range& r) { - Range result (x + r.base (), r.inc (), r.nelem ()); + Range result (x + r.base (), x + r.limit (), r.inc (), r.nelem ()); if (result.rng_nelem < 0) result.cache = x + r.matrix_value (); @@ -401,7 +401,7 @@ Range operator + (const Range& r, double x) { - Range result (r.base () + x, r.inc (), r.nelem ()); + Range result (r.base () + x, r.limit () + x, r.inc (), r.nelem ()); if (result.rng_nelem < 0) result.cache = r.matrix_value () + x; @@ -410,7 +410,7 @@ Range operator - (double x, const Range& r) { - Range result (x - r.base (), -r.inc (), r.nelem ()); + Range result (x - r.base (), x - r.limit (), -r.inc (), r.nelem ()); if (result.rng_nelem < 0) result.cache = x - r.matrix_value (); @@ -419,7 +419,7 @@ Range operator - (const Range& r, double x) { - Range result (r.base () - x, r.inc (), r.nelem ()); + Range result (r.base () - x, r.limit () - x, r.inc (), r.nelem ()); if (result.rng_nelem < 0) result.cache = r.matrix_value () - x; @@ -428,7 +428,7 @@ Range operator * (double x, const Range& r) { - Range result (x * r.base (), x * r.inc (), r.nelem ()); + Range result (x * r.base (), x * r.limit (), x * r.inc (), r.nelem ()); if (result.rng_nelem < 0) result.cache = x * r.matrix_value (); @@ -437,7 +437,7 @@ Range operator * (const Range& r, double x) { - Range result (r.base () * x, r.inc () * x, r.nelem ()); + Range result (r.base () * x, r.limit () * x, r.inc () * x, r.nelem ()); if (result.rng_nelem < 0) result.cache = r.matrix_value () * x;