fix bug in the computation of rank
very difficult to catch in unit-tests because this is very noisy
diff --git a/Eigen/src/LU/LU.h b/Eigen/src/LU/LU.h
index 82b408d..b36dc30 100644
--- a/Eigen/src/LU/LU.h
+++ b/Eigen/src/LU/LU.h
@@ -401,9 +401,11 @@
 
   m_det_pq = (number_of_transpositions%2) ? -1 : 1;
 
-  for(m_rank = 0; m_rank < size; ++m_rank)
-    if(ei_isMuchSmallerThan(m_lu.diagonal().coeff(m_rank), m_lu.diagonal().coeff(0)))
-      break;
+  RealScalar biggest_diagonal_coeff = m_lu.diagonal().cwise().abs().maxCoeff();
+  m_rank = 0;
+  for(int k = 0; k < size; ++k)
+    if(!ei_isMuchSmallerThan(m_lu.diagonal().coeff(k), biggest_diagonal_coeff))
+      ++m_rank;
 }
 
 template<typename MatrixType>