From b0d08869a97b6ce94ce6590e91a1e7b79dd21f05 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 23 Jun 2015 14:54:31 +0200 Subject: [PATCH] Fix underflow in 3x3 tridiagonalization --- Eigen/src/Eigenvalues/Tridiagonalization.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Eigen/src/Eigenvalues/Tridiagonalization.h b/Eigen/src/Eigenvalues/Tridiagonalization.h index a6fb00b21..f21331312 100644 --- a/Eigen/src/Eigenvalues/Tridiagonalization.h +++ b/Eigen/src/Eigenvalues/Tridiagonalization.h @@ -464,9 +464,10 @@ struct tridiagonalization_inplace_selector static void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, bool extractQ) { using std::sqrt; + const RealScalar tol = (std::numeric_limits::min)(); diag[0] = mat(0,0); RealScalar v1norm2 = numext::abs2(mat(2,0)); - if(v1norm2 == RealScalar(0)) + if(v1norm2 <= tol) { diag[1] = mat(1,1); diag[2] = mat(2,2);