mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-10-13 08:31:28 +08:00
Fix bug #613: psqrt was incorrect for small numbers
(transplanted from d5fa5001a7c6ba3ea29c5a4f18aebb8c1ec71dd6 )
This commit is contained in:
parent
21826e9e53
commit
5dca39eb8b
@ -374,7 +374,7 @@ Packet4f psqrt<Packet4f>(const Packet4f& _x)
|
||||
Packet4f half = pmul(_x, pset1<Packet4f>(.5f));
|
||||
|
||||
/* select only the inverse sqrt of non-zero inputs */
|
||||
Packet4f non_zero_mask = _mm_cmpgt_ps(_x, pset1<Packet4f>(std::numeric_limits<float>::epsilon()));
|
||||
Packet4f non_zero_mask = _mm_cmpgt_ps(_x, pset1<Packet4f>((std::numeric_limits<float>::min)()));
|
||||
Packet4f x = _mm_and_ps(non_zero_mask, _mm_rsqrt_ps(_x));
|
||||
|
||||
x = pmul(x, psub(pset1<Packet4f>(1.5f), pmul(half, pmul(x,x))));
|
||||
|
Loading…
x
Reference in New Issue
Block a user