From a1e092d1e8402c2148151c4030df771f97309dd6 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Wed, 31 Aug 2016 15:04:16 -0700 Subject: Fix bugs to make min- and max reducers with correctly with IEEE infinities. --- unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h') diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h b/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h index a8e48fced..6a6700cf0 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h @@ -200,9 +200,12 @@ template struct MaxReducer EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void reducePacket(const Packet& p, Packet* accum) const { (*accum) = pmax(*accum, p); } - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T initialize() const { - return Eigen::NumTraits::lowest(); + if (Eigen::NumTraits::IsInteger) { + return Eigen::NumTraits::lowest(); + } else { + return -Eigen::NumTraits::infinity(); + } } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet initializePacket() const { @@ -242,9 +245,12 @@ template struct MinReducer EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void reducePacket(const Packet& p, Packet* accum) const { (*accum) = pmin(*accum, p); } - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T initialize() const { - return Eigen::NumTraits::highest(); + if (Eigen::NumTraits::IsInteger) { + return Eigen::NumTraits::highest(); + } else { + return Eigen::NumTraits::infinity(); + } } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet initializePacket() const { -- cgit v1.2.3