Mercurial > hg > octave-lyh
changeset 8776:d23c33ec6bd3
fix min/max behaviour with NaNs
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 17 Feb 2009 09:45:34 +0100 |
parents | a2a9dc5e8565 |
children | 724c0f46d9d4 |
files | liboctave/ChangeLog liboctave/mx-inlines.cc |
diffstat | 2 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,7 @@ +2009-02-17 Jaroslav Hajek <highegg@gmail.com> + + * mx-inlines.cc (OP_MINMAX_FCN): Correct behaviour with NaNs. + 2009-02-17 Jaroslav Hajek <highegg@gmail.com> * MArray-defs.h: Move declarative part to MArray-decl.h
--- a/liboctave/mx-inlines.cc +++ b/liboctave/mx-inlines.cc @@ -498,8 +498,12 @@ if (! n) return; \ T tmp = v[0]; \ octave_idx_type i = 1; \ - while (xisnan (tmp) && i < n) tmp = v[i++]; \ - for (i = 1; i < n; i++) \ + if (xisnan (tmp)) \ + { \ + for (; i < n && xisnan (v[i]); i++) ; \ + if (i < n) tmp = v[i]; \ + } \ + for (; i < n; i++) \ if (v[i] OP tmp) tmp = v[i]; \ *r = tmp; \ } \ @@ -510,8 +514,12 @@ T tmp = v[0]; \ octave_idx_type tmpi = 0; \ octave_idx_type i = 1; \ - while (xisnan (tmp) && i < n) tmp = v[i++]; \ - for (i = 1; i < n; i++) \ + if (xisnan (tmp)) \ + { \ + for (; i < n && xisnan (v[i]); i++) ; \ + if (i < n) { tmp = v[i]; tmpi = i; } \ + } \ + for (; i < n; i++) \ if (v[i] OP tmp) { tmp = v[i]; tmpi = i; }\ *r = tmp; \ *ri = tmpi; \