Mercurial > hg > octave-lyh
diff liboctave/mx-op-defs.h @ 7922:935be827eaf8
error for NaN values in & and | expressions
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 11 Jul 2008 14:56:30 -0400 |
parents | 82be108cc558 |
children | 8b1a2555c4e2 |
line wrap: on
line diff
--- a/liboctave/mx-op-defs.h +++ b/liboctave/mx-op-defs.h @@ -228,9 +228,21 @@ { \ r.resize (nr, nc); \ \ - for (int j = 0; j < nc; j++) \ - for (int i = 0; i < nr; i++) \ - r.elem(i, j) = (m.elem(i, j) != LHS_ZERO) OP (s != RHS_ZERO); \ + if (xisnan (s)) \ + gripe_nan_to_logical_conversion (); \ + else \ + { \ + \ + for (int j = 0; j < nc; j++) \ + for (int i = 0; i < nr; i++) \ + if (xisnan (m.elem(i, j))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i, j) = (m.elem(i, j) != LHS_ZERO) OP (s != RHS_ZERO); \ + } \ } \ \ return r; \ @@ -331,9 +343,20 @@ { \ r.resize (nr, nc); \ \ - for (int j = 0; j < nc; j++) \ - for (int i = 0; i < nr; i++) \ - r.elem(i, j) = (s != LHS_ZERO) OP (m.elem(i, j) != RHS_ZERO); \ + if (xisnan (s)) \ + gripe_nan_to_logical_conversion (); \ + else \ + { \ + for (int j = 0; j < nc; j++) \ + for (int i = 0; i < nr; i++) \ + if (xisnan (m.elem(i, j))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i, j) = (s != LHS_ZERO) OP (m.elem(i, j) != RHS_ZERO); \ + } \ } \ \ return r; \ @@ -456,8 +479,14 @@ \ for (int j = 0; j < m1_nc; j++) \ for (int i = 0; i < m1_nr; i++) \ - r.elem(i, j) = (m1.elem(i, j) != LHS_ZERO) \ - OP (m2.elem(i, j) != RHS_ZERO); \ + if (xisnan (m1.elem(i, j)) || xisnan (m2.elem(i, j))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i, j) = (m1.elem(i, j) != LHS_ZERO) \ + OP (m2.elem(i, j) != RHS_ZERO); \ } \ } \ else \ @@ -605,8 +634,19 @@ { \ r.resize (m.dims ()); \ \ - for (int i = 0; i < len; i++) \ - r.elem(i) = (m.elem(i) != LHS_ZERO) OP (s != RHS_ZERO); \ + if (xisnan (s)) \ + gripe_nan_to_logical_conversion (); \ + else \ + { \ + for (int i = 0; i < len; i++) \ + if (xisnan (m.elem(i))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i) = (m.elem(i) != LHS_ZERO) OP (s != RHS_ZERO); \ + } \ } \ \ return r; \ @@ -748,8 +788,19 @@ { \ r.resize (m.dims ()); \ \ - for (int i = 0; i < len; i++) \ - r.elem(i) = (s != LHS_ZERO) OP (m.elem(i) != RHS_ZERO); \ + if (xisnan (s)) \ + gripe_nan_to_logical_conversion (); \ + else \ + { \ + for (int i = 0; i < len; i++) \ + if (xisnan (m.elem(i))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i) = (s != LHS_ZERO) OP (m.elem(i) != RHS_ZERO); \ + } \ } \ \ return r; \ @@ -863,7 +914,13 @@ r.resize (m1_dims); \ \ for (int i = 0; i < m1.length (); i++) \ - r.elem(i) = (m1.elem(i) != LHS_ZERO) OP (m2.elem(i) != RHS_ZERO); \ + if (xisnan (m1.elem(i)) || xisnan (m2.elem(i))) \ + { \ + gripe_nan_to_logical_conversion (); \ + return r; \ + } \ + else \ + r.elem(i) = (m1.elem(i) != LHS_ZERO) OP (m2.elem(i) != RHS_ZERO); \ } \ } \ else \