From 0d03492e1e6e70b8c835785bdb1a9b7720e09dd1 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 23 Jan 2012 21:49:00 +0100 Subject: [PATCH] std::isfinite is non standard --- Eigen/src/Cholesky/LDLT.h | 3 ++- Eigen/src/Core/MathFunctions.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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