diff --git a/Eigen/src/Cholesky/LDLT.h b/Eigen/src/Cholesky/LDLT.h index 6a2d2994b..94b679ede 100644 --- a/Eigen/src/Cholesky/LDLT.h +++ b/Eigen/src/Cholesky/LDLT.h @@ -354,6 +354,7 @@ template<> struct ldlt_inplace template static bool updateInPlace(MatrixType& mat, MatrixBase& w, typename MatrixType::RealScalar sigma=1) { + using internal::isfinite; typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::RealScalar RealScalar; typedef typename MatrixType::Index Index; @@ -367,7 +368,7 @@ template<> struct ldlt_inplace for (Index j = 0; j < size; j++) { // Check for termination due to an original decomposition of low-rank - if (!std::isfinite(alpha)) + if (!isfinite(alpha)) break; // Update the diagonal terms diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 3680be4a0..971019f06 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -837,6 +837,17 @@ template<> struct scalar_fuzzy_impl }; +/**************************************************************************** +* Special functions * +****************************************************************************/ + +// std::isfinite is non standard, so let's define our own version, +// even though it is not very efficient. +template bool isfinite(const T& x) +{ + return x::highest() && x>NumTraits::lowest(); +} + } // end namespace internal #endif // EIGEN_MATHFUNCTIONS_H