From 5dca39eb8b9387a3786e63f508318de6169cb0cc Mon Sep 17 00:00:00 2001 From: Jeff Dean Date: Thu, 13 Jun 2013 18:17:27 +0200 Subject: [PATCH] Fix bug #613: psqrt was incorrect for small numbers (transplanted from d5fa5001a7c6ba3ea29c5a4f18aebb8c1ec71dd6 ) --- Eigen/src/Core/arch/SSE/MathFunctions.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Eigen/src/Core/arch/SSE/MathFunctions.h b/Eigen/src/Core/arch/SSE/MathFunctions.h index d917b6f1d..9bd871f0e 100644 --- a/Eigen/src/Core/arch/SSE/MathFunctions.h +++ b/Eigen/src/Core/arch/SSE/MathFunctions.h @@ -374,7 +374,7 @@ Packet4f psqrt(const Packet4f& _x) Packet4f half = pmul(_x, pset1(.5f)); /* select only the inverse sqrt of non-zero inputs */ - Packet4f non_zero_mask = _mm_cmpgt_ps(_x, pset1(std::numeric_limits::epsilon())); + Packet4f non_zero_mask = _mm_cmpgt_ps(_x, pset1((std::numeric_limits::min)())); Packet4f x = _mm_and_ps(non_zero_mask, _mm_rsqrt_ps(_x)); x = pmul(x, psub(pset1(1.5f), pmul(half, pmul(x,x))));