diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-06-23 14:54:31 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-06-23 14:54:31 +0200 |
commit | b0d08869a97b6ce94ce6590e91a1e7b79dd21f05 (patch) | |
tree | cb09870f2fade02d5db18f4850921266aee36884 /Eigen/src/Eigenvalues | |
parent | 18c9d155f31af4a9618c70df1d0ece709ef93341 (diff) |
Fix underflow in 3x3 tridiagonalization
Diffstat (limited to 'Eigen/src/Eigenvalues')
-rw-r--r-- | Eigen/src/Eigenvalues/Tridiagonalization.h | 3 |
1 files changed, 2 insertions, 1 deletions
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<MatrixType,3,false> static void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, bool extractQ) { using std::sqrt; + const RealScalar tol = (std::numeric_limits<RealScalar>::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); |