fix bad fuzzy comparison in 3x3 tridiagonalization

This commit is contained in:
Gael Guennebaud 2010-07-16 16:38:58 +02:00
parent 044424b0e2
commit 6ab9e8632f

View File

@ -458,7 +458,7 @@ struct ei_tridiagonalization_inplace_selector
}; };
/** \internal /** \internal
* Specialization for 3x3 matrices. * Specialization for 3x3 real matrices.
* Especially useful for plane fitting. * Especially useful for plane fitting.
*/ */
template<typename MatrixType> template<typename MatrixType>
@ -472,7 +472,7 @@ struct ei_tridiagonalization_inplace_selector<MatrixType,3>
{ {
diag[0] = ei_real(mat(0,0)); diag[0] = ei_real(mat(0,0));
RealScalar v1norm2 = ei_abs2(mat(2,0)); RealScalar v1norm2 = ei_abs2(mat(2,0));
if (ei_isMuchSmallerThan(v1norm2, RealScalar(1))) if(v1norm2 == RealScalar(0) && ei_imag(mat(1,0))==RealScalar(0))
{ {
diag[1] = ei_real(mat(1,1)); diag[1] = ei_real(mat(1,1));
diag[2] = ei_real(mat(2,2)); diag[2] = ei_real(mat(2,2));