aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Eigenvalues/Tridiagonalization.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-06-23 14:54:31 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-06-23 14:54:31 +0200
commitb0d08869a97b6ce94ce6590e91a1e7b79dd21f05 (patch)
treecb09870f2fade02d5db18f4850921266aee36884 /Eigen/src/Eigenvalues/Tridiagonalization.h
parent18c9d155f31af4a9618c70df1d0ece709ef93341 (diff)
Fix underflow in 3x3 tridiagonalization
Diffstat (limited to 'Eigen/src/Eigenvalues/Tridiagonalization.h')
-rw-r--r--Eigen/src/Eigenvalues/Tridiagonalization.h3
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);