Mercurial > octave
diff libinterp/corefcn/xpow.cc @ 29389:85998370816a
Return empty matrix when using an empty matrix as base or exponent in '^' operator (bug #68006).
* xpow.cc: Change all input validation to detect empty matrix (nrows == 0 ||
ncols == 0) as either base or exponent and return an empty matrix of the
appropriate type (Matrix for double or FloatMatrix for single).
author | Rik <rik@octave.org> |
---|---|
date | Mon, 22 Feb 2021 16:07:49 -0800 |
parents | 7854d5752dd2 |
children | 540f25090412 |
line wrap: on
line diff
--- a/libinterp/corefcn/xpow.cc Mon Feb 22 11:55:23 2021 +0900 +++ b/libinterp/corefcn/xpow.cc Mon Feb 22 16:07:49 2021 -0800 @@ -119,7 +119,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); try @@ -170,7 +173,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); EIG b_eig (b); @@ -209,7 +215,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -295,7 +304,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -335,7 +347,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); EIG a_eig (a); @@ -383,7 +398,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); EIG b_eig (b); @@ -431,7 +449,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); EIG b_eig (b); @@ -470,7 +491,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -556,7 +580,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); EIG a_eig (a); @@ -590,7 +617,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return Matrix (); + + if (nr != nc) err_nonsquare_matrix (); ComplexDiagMatrix r (nr, nc); @@ -1522,7 +1552,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG b_eig (b); @@ -1574,7 +1607,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG b_eig (b); @@ -1613,7 +1649,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -1699,7 +1738,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -1729,7 +1771,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG a_eig (a); @@ -1777,7 +1822,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG b_eig (b); @@ -1825,7 +1873,10 @@ octave_idx_type nr = b.rows (); octave_idx_type nc = b.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG b_eig (b); @@ -1864,7 +1915,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); if (xisint (b)) @@ -1950,7 +2004,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatEIG a_eig (a); @@ -1984,7 +2041,10 @@ octave_idx_type nr = a.rows (); octave_idx_type nc = a.cols (); - if (nr == 0 || nc == 0 || nr != nc) + if (nr == 0 || nc == 0) + return FloatMatrix (); + + if (nr != nc) err_nonsquare_matrix (); FloatComplexDiagMatrix r (nr, nc);