From c3e398d138f5877b156a7cdbbee47d4a86631190 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 23 Jun 2015 15:05:20 +0200 Subject: Fix overflow when checking SVD accuracy --- test/svd_common.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/svd_common.h') diff --git a/test/svd_common.h b/test/svd_common.h index e300336c6..d8611b541 100644 --- a/test/svd_common.h +++ b/test/svd_common.h @@ -33,6 +33,7 @@ void svd_check_full(const MatrixType& m, const SvdType& svd) }; typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; typedef Matrix MatrixUType; typedef Matrix MatrixVType; @@ -40,7 +41,10 @@ void svd_check_full(const MatrixType& m, const SvdType& svd) sigma.diagonal() = svd.singularValues().template cast(); MatrixUType u = svd.matrixU(); MatrixVType v = svd.matrixV(); - VERIFY_IS_APPROX(m, u * sigma * v.adjoint()); + RealScalar scaling = m.cwiseAbs().maxCoeff(); + if(scaling<=(std::numeric_limits::min)()) + scaling = RealScalar(1); + VERIFY_IS_APPROX(m/scaling, u * (sigma/scaling) * v.adjoint()); VERIFY_IS_UNITARY(u); VERIFY_IS_UNITARY(v); } -- cgit v1.2.3