diff options
author | Antonio Sanchez <cantonios@google.com> | 2021-01-07 09:39:05 -0800 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2021-01-08 01:17:19 +0000 |
commit | f149e0ebc3d3d5ca63234e58ca72690caf07e3b5 (patch) | |
tree | 8c5431fd057c96b8231be84b2908d130b49d61ec /Eigen/src/Core/MathFunctions.h | |
parent | 8d9cfba799ce3462c12568a36392e0abf36fc62d (diff) |
Fix MSVC complex sqrt and packetmath test.
MSVC incorrectly handles `inf` cases for `std::sqrt<std::complex<T>>`.
Here we replace it with a custom version (currently used on GPU).
Also fixed the `packetmath` test, which previously skipped several
corner cases since `CHECK_CWISE1` only tests the first `PacketSize`
elements.
Diffstat (limited to 'Eigen/src/Core/MathFunctions.h')
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 928bc8e72..5b5ca46f6 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -338,6 +338,22 @@ struct sqrt_impl } }; +// Complex sqrt defined in MathFunctionsImpl.h. +template<typename T> std::complex<T> complex_sqrt(const std::complex<T>& a_x); + +// MSVC incorrectly handles inf cases. +#if EIGEN_COMP_MSVC > 0 +template<typename T> +struct sqrt_impl<std::complex<T> > +{ + EIGEN_DEVICE_FUNC + static EIGEN_ALWAYS_INLINE std::complex<T> run(const std::complex<T>& x) + { + return complex_sqrt<T>(x); + } +}; +#endif + template<typename Scalar> struct sqrt_retval { |