From 46bee5682fc41a8e2ad1f563b6362a9297ca3094 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 23 May 2011 13:34:04 +0200 Subject: [PATCH] clean a bit previous patch (ctor vs static_cast and a few bits) --- Eigen/src/Core/TriangularMatrix.h | 9 ++++++--- Eigen/src/Eigenvalues/EigenSolver.h | 6 +++--- Eigen/src/Eigenvalues/RealSchur.h | 6 +++--- Eigen/src/Jacobi/Jacobi.h | 12 ++++++------ Eigen/src/LU/PartialPivLU.h | 2 +- Eigen/src/QR/ColPivHouseholderQR.h | 4 ++-- Eigen/src/SVD/JacobiSVD.h | 6 +++--- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h index 38c4f1949..c04fa0c32 100644 --- a/Eigen/src/Core/TriangularMatrix.h +++ b/Eigen/src/Core/TriangularMatrix.h @@ -448,6 +448,8 @@ struct triangular_assignment_selector col = (UnrollCount-1) / Derived1::RowsAtCompileTime, row = (UnrollCount-1) % Derived1::RowsAtCompileTime }; + + typedef typename Derived1::Scalar Scalar; inline static void run(Derived1 &dst, const Derived2 &src) { @@ -466,9 +468,9 @@ struct triangular_assignment_selector else if(ClearOpposite) { if (Mode&UnitDiag && row==col) - dst.coeffRef(row, col) = 1; + dst.coeffRef(row, col) = Scalar(1); else - dst.coeffRef(row, col) = static_cast(0); + dst.coeffRef(row, col) = Scalar(0); } } }; @@ -484,6 +486,7 @@ template struct triangular_assignment_selector { typedef typename Derived1::Index Index; + typedef typename Derived1::Scalar Scalar; inline static void run(Derived1 &dst, const Derived2 &src) { for(Index j = 0; j < dst.cols(); ++j) @@ -493,7 +496,7 @@ struct triangular_assignment_selector(0); + dst.coeffRef(i, j) = Scalar(0); } } }; diff --git a/Eigen/src/Eigenvalues/EigenSolver.h b/Eigen/src/Eigenvalues/EigenSolver.h index af9cf357b..0c2df54b2 100644 --- a/Eigen/src/Eigenvalues/EigenSolver.h +++ b/Eigen/src/Eigenvalues/EigenSolver.h @@ -450,7 +450,7 @@ void EigenSolver::doComputeEigenvectors() Scalar q = m_eivalues.coeff(n).imag(); // Scalar vector - if (q == static_cast(0)) + if (q == Scalar(0)) { Scalar lastr=0, lastw=0; Index l = n; @@ -530,7 +530,7 @@ void EigenSolver::doComputeEigenvectors() else { l = i; - if (m_eivalues.coeff(i).imag() == static_cast(0)) + if (m_eivalues.coeff(i).imag() == RealScalar(0)) { std::complex cc = cdiv(-ra,-sa,w,q); m_matT.coeffRef(i,n-1) = internal::real(cc); @@ -564,7 +564,7 @@ void EigenSolver::doComputeEigenvectors() // Overflow control Scalar t = std::max(internal::abs(m_matT.coeff(i,n-1)),internal::abs(m_matT.coeff(i,n))); - if ((eps * t) * t > static_cast(1)) + if ((eps * t) * t > Scalar(1)) m_matT.block(i, n-1, size-i, 2) /= t; } diff --git a/Eigen/src/Eigenvalues/RealSchur.h b/Eigen/src/Eigenvalues/RealSchur.h index 11ee5f5e8..c61ae444c 100644 --- a/Eigen/src/Eigenvalues/RealSchur.h +++ b/Eigen/src/Eigenvalues/RealSchur.h @@ -324,11 +324,11 @@ inline void RealSchur::splitOffTwoRows(Index iu, bool computeU, Scal m_matT.coeffRef(iu,iu) += exshift; m_matT.coeffRef(iu-1,iu-1) += exshift; - if (q >= static_cast(0)) // Two real eigenvalues + if (q >= Scalar(0)) // Two real eigenvalues { Scalar z = internal::sqrt(internal::abs(q)); JacobiRotation rot; - if (p >= static_cast(0)) + if (p >= Scalar(0)) rot.makeGivens(p + z, m_matT.coeff(iu, iu-1)); else rot.makeGivens(p - z, m_matT.coeff(iu, iu-1)); @@ -369,7 +369,7 @@ inline void RealSchur::computeShift(Index iu, Index iter, Scalar& ex { Scalar s = (shiftInfo.coeff(1) - shiftInfo.coeff(0)) / Scalar(2.0); s = s * s + shiftInfo.coeff(2); - if (s > static_cast(0)) + if (s > Scalar(0)) { s = internal::sqrt(s); if (shiftInfo.coeff(1) < shiftInfo.coeff(0)) diff --git a/Eigen/src/Jacobi/Jacobi.h b/Eigen/src/Jacobi/Jacobi.h index 27058a97e..98dea6800 100644 --- a/Eigen/src/Jacobi/Jacobi.h +++ b/Eigen/src/Jacobi/Jacobi.h @@ -104,9 +104,9 @@ bool JacobiRotation::makeJacobi(RealScalar x, Scalar y, RealScalar z) else { RealScalar tau = (x-z)/(RealScalar(2)*internal::abs(y)); - RealScalar w = internal::sqrt(internal::abs2(tau) + static_cast(1)); + RealScalar w = internal::sqrt(internal::abs2(tau) + RealScalar(1)); RealScalar t; - if(tau>static_cast(0)) + if(tau>RealScalar(0)) { t = RealScalar(1) / (tau + w); } @@ -114,8 +114,8 @@ bool JacobiRotation::makeJacobi(RealScalar x, Scalar y, RealScalar z) { t = RealScalar(1) / (tau - w); } - RealScalar sign_t = t > static_cast(0) ? static_cast(1) : static_cast(-1); - RealScalar n = RealScalar(1) / internal::sqrt(internal::abs2(t)+static_cast(1)); + RealScalar sign_t = t > RealScalar(0) ? RealScalar(1) : RealScalar(-1); + RealScalar n = RealScalar(1) / internal::sqrt(internal::abs2(t)+RealScalar(1)); m_s = - sign_t * (internal::conj(y) / internal::abs(y)) * internal::abs(t) * n; m_c = n; return true; @@ -221,13 +221,13 @@ template void JacobiRotation::makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type) { - if(q==static_cast(0)) + if(q==Scalar(0)) { m_c = p(0)) + else if(p==Scalar(0)) { m_c = Scalar(0); m_s = q(0)) + if(biggest_in_corner != RealScalar(0)) { if(k != row_of_biggest_in_col) { diff --git a/Eigen/src/QR/ColPivHouseholderQR.h b/Eigen/src/QR/ColPivHouseholderQR.h index 8a81fa8ed..2fa85722e 100644 --- a/Eigen/src/QR/ColPivHouseholderQR.h +++ b/Eigen/src/QR/ColPivHouseholderQR.h @@ -387,7 +387,7 @@ ColPivHouseholderQR& ColPivHouseholderQR::compute(const for(Index k = 0; k < cols; ++k) m_colSqNorms.coeffRef(k) = m_qr.col(k).squaredNorm(); - RealScalar threshold_helper = m_colSqNorms.maxCoeff() * internal::abs2(NumTraits::epsilon()) / static_cast(rows); + RealScalar threshold_helper = m_colSqNorms.maxCoeff() * internal::abs2(NumTraits::epsilon()) / RealScalar(rows); m_nonzero_pivots = size; // the generic case is that in which all pivots are nonzero (invertible case) m_maxpivot = RealScalar(0); @@ -413,7 +413,7 @@ ColPivHouseholderQR& ColPivHouseholderQR::compute(const // Note that here, if we test instead for "biggest == 0", we get a failure every 1000 (or so) // repetitions of the unit test, with the result of solve() filled with large values of the order // of 1/(size*epsilon). - if(biggest_col_sq_norm < threshold_helper * static_cast(rows-k)) + if(biggest_col_sq_norm < threshold_helper * RealScalar(rows-k)) { m_nonzero_pivots = k; m_hCoeffs.tail(size-k).setZero(); diff --git a/Eigen/src/SVD/JacobiSVD.h b/Eigen/src/SVD/JacobiSVD.h index 93e176c68..29134c03f 100644 --- a/Eigen/src/SVD/JacobiSVD.h +++ b/Eigen/src/SVD/JacobiSVD.h @@ -271,13 +271,13 @@ void real_2x2_jacobi_svd(const MatrixType& matrix, Index p, Index q, RealScalar d = m.coeff(1,0) - m.coeff(0,1); if(t == RealScalar(0)) { - rot1.c() = static_cast(0); - rot1.s() = d > static_cast(0) ? static_cast(1) : static_cast(-1); + rot1.c() = RealScalar(0); + rot1.s() = d > RealScalar(0) ? RealScalar(1) : RealScalar(-1); } else { RealScalar u = d / t; - rot1.c() = RealScalar(1) / sqrt(static_cast(1) + abs2(u)); + rot1.c() = RealScalar(1) / sqrt(RealScalar(1) + abs2(u)); rot1.s() = rot1.c() * u; } m.applyOnTheLeft(0,1,rot1);