diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-07-12 17:21:03 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-07-12 17:21:03 +0200 |
commit | e2aa58b6316ba869be039e49dce73f99647f4139 (patch) | |
tree | 13e0f9182f1c49ad9630d3597d0339157ad5204e /Eigen/src/misc/RealSvd2x2.h | |
parent | 263993a7b61959111dd39d5e1cbb5ed861263d46 (diff) |
Consider denormals as zero in makeJacobi and 2x2 SVD.
This also fix serious issues with x387 for which values can be much smaller than the smallest denormal!
Diffstat (limited to 'Eigen/src/misc/RealSvd2x2.h')
-rw-r--r-- | Eigen/src/misc/RealSvd2x2.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/Eigen/src/misc/RealSvd2x2.h b/Eigen/src/misc/RealSvd2x2.h index dfaaa0b17..abb4d3c2f 100644 --- a/Eigen/src/misc/RealSvd2x2.h +++ b/Eigen/src/misc/RealSvd2x2.h @@ -28,7 +28,8 @@ void real_2x2_jacobi_svd(const MatrixType& matrix, Index p, Index q, JacobiRotation<RealScalar> rot1; RealScalar t = m.coeff(0,0) + m.coeff(1,1); RealScalar d = m.coeff(1,0) - m.coeff(0,1); - if(d == RealScalar(0)) + + if(abs(d) < (std::numeric_limits<RealScalar>::min)()) { rot1.s() = RealScalar(0); rot1.c() = RealScalar(1); |