--- Umeyama.h.orig 2014-02-26 10:35:18.000000000 -0500 +++ Umeyama.h.orig 2014-03-27 15:12:25.767370970 -0400 @@ -136,22 +136,13 @@ // Eq. (39) VectorType S = VectorType::Ones(m); - if (sigma.determinant()<0) S(m-1) = -1; // Eq. (40) and (43) - const VectorType& d = svd.singularValues(); - Index rank = 0; for (Index i=0; i 0 ) { - Rt.block(0,0,m,m).noalias() = svd.matrixU()*svd.matrixV().transpose(); - } else { - const Scalar s = S(m-1); S(m-1) = -1; - Rt.block(0,0,m,m).noalias() = svd.matrixU() * S.asDiagonal() * svd.matrixV().transpose(); - S(m-1) = s; - } - } else { - Rt.block(0,0,m,m).noalias() = svd.matrixU() * S.asDiagonal() * svd.matrixV().transpose(); - } + if ( svd.matrixU().determinant() * svd.matrixV().determinant() < 0 ) + S(m-1) = -1; + + Rt.block(0,0,m,m).noalias() = + svd.matrixU() * S.asDiagonal() * svd.matrixV().transpose(); if (with_scaling) {