--- liboctave/CMatrix.cc.orig 2008-01-26 09:45:59.000000000 +0100 +++ liboctave/CMatrix.cc 2008-01-26 09:47:35.000000000 +0100 @@ -2929,8 +2929,8 @@ for (octave_idx_type i = 0; i < nc; i++) iperm(i) = i; // initialize to identity permutation - // leading permutations in forward order - for (octave_idx_type i = 0; i < (ilo-1); i++) + // trailing permutations must be done in reverse order + for (octave_idx_type i = nc - 1; i >= ihi; i--) { octave_idx_type swapidx = static_cast (dpermute(i)) - 1; octave_idx_type tmp = iperm(i); @@ -2938,25 +2938,8 @@ iperm(swapidx) = tmp; } - // construct inverse balancing permutation vector - Array invpvec (nc); - for (octave_idx_type i = 0; i < nc; i++) - invpvec(iperm(i)) = i; // Thanks to R. A. Lippert for this method - - OCTAVE_QUIT; - - ComplexMatrix tmpMat = retval; - for (octave_idx_type i = 0; i < nc; i++) - for (octave_idx_type j = 0; j < nc; j++) - retval(i,j) = tmpMat(invpvec(i),invpvec(j)); - - OCTAVE_QUIT; - - for (octave_idx_type i = 0; i < nc; i++) - iperm(i) = i; // initialize to identity permutation - - // trailing permutations must be done in reverse order - for (octave_idx_type i = nc - 1; i >= ihi; i--) + // leading permutations in forward order + for (octave_idx_type i = 0; i < (ilo-1); i++) { octave_idx_type swapidx = static_cast (dpermute(i)) - 1; octave_idx_type tmp = iperm(i); @@ -2965,12 +2948,13 @@ } // construct inverse balancing permutation vector + Array invpvec (nc); for (octave_idx_type i = 0; i < nc; i++) invpvec(iperm(i)) = i; // Thanks to R. A. Lippert for this method OCTAVE_QUIT; - tmpMat = retval; + ComplexMatrix tmpMat = retval; for (octave_idx_type i = 0; i < nc; i++) for (octave_idx_type j = 0; j < nc; j++) retval(i,j) = tmpMat(invpvec(i),invpvec(j));