From 9ff967199ab287465c04515c56d9c74c65c71625 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sun, 18 Oct 2015 22:15:01 +0200 Subject: [PATCH] Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of x * (1/y)) (grafted from fe630c98739186c1dd3faf7a06b52a64baa5ea23 ) --- Eigen/src/Cholesky/LLT.h | 2 +- Eigen/src/Core/products/TriangularSolverMatrix.h | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Eigen/src/Cholesky/LLT.h b/Eigen/src/Cholesky/LLT.h index 59723a63d..7c11a2dc2 100644 --- a/Eigen/src/Cholesky/LLT.h +++ b/Eigen/src/Cholesky/LLT.h @@ -289,7 +289,7 @@ template struct llt_inplace return k; mat.coeffRef(k,k) = x = sqrt(x); if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint(); - if (rs>0) A21 *= RealScalar(1)/x; + if (rs>0) A21 /= x; } return -1; } diff --git a/Eigen/src/Core/products/TriangularSolverMatrix.h b/Eigen/src/Core/products/TriangularSolverMatrix.h index f103eae72..04240ab50 100644 --- a/Eigen/src/Core/products/TriangularSolverMatrix.h +++ b/Eigen/src/Core/products/TriangularSolverMatrix.h @@ -302,9 +302,12 @@ EIGEN_DONT_INLINE void triangular_solve_matrix