diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h index 599786302..9ea39be71 100644 --- a/Eigen/src/QR/Tridiagonalization.h +++ b/Eigen/src/QR/Tridiagonalization.h @@ -201,6 +201,7 @@ void Tridiagonalization::_compute(MatrixType& matA, CoeffVectorType& // squared norm of the vector v skipping the first element RealScalar v1norm2 = matA.col(i).end(n-(i+2)).squaredNorm(); + // FIXME comparing against 1 if (ei_isMuchSmallerThan(v1norm2,static_cast(1))) { hCoeffs.coeffRef(i) = 0.; @@ -331,7 +332,8 @@ void Tridiagonalization::_compute(MatrixType& matA, CoeffVectorType& if (ei_real(v0)>=0.) beta = -beta; matA.col(i).coeffRef(i+1) = beta; - hCoeffs.coeffRef(i) = (beta - v0) / beta; + if(ei_isMuchSmallerThan(beta, Scalar(1))) hCoeffs.coeffRef(i) = Scalar(0); + else hCoeffs.coeffRef(i) = (beta - v0) / beta; } else {