Fix conjugate-gradient for very small rhs

(grafted from 1141bcf7940cf18974f72fcad3febc41e07bc6ec
)
This commit is contained in:
Gael Guennebaud 2018-09-13 23:53:28 +02:00
parent 92cd158c01
commit bc000deaae

View File

@ -50,7 +50,8 @@ void conjugate_gradient(const MatrixType& mat, const Rhs& rhs, Dest& x,
tol_error = 0; tol_error = 0;
return; return;
} }
RealScalar threshold = tol*tol*rhsNorm2; const RealScalar considerAsZero = (std::numeric_limits<RealScalar>::min)();
RealScalar threshold = numext::maxi(tol*tol*rhsNorm2,considerAsZero);
RealScalar residualNorm2 = residual.squaredNorm(); RealScalar residualNorm2 = residual.squaredNorm();
if (residualNorm2 < threshold) if (residualNorm2 < threshold)
{ {