aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/misc/RealSvd2x2.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2016-07-12 17:21:03 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2016-07-12 17:21:03 +0200
commite2aa58b6316ba869be039e49dce73f99647f4139 (patch)
tree13e0f9182f1c49ad9630d3597d0339157ad5204e /Eigen/src/misc/RealSvd2x2.h
parent263993a7b61959111dd39d5e1cbb5ed861263d46 (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.h3
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);