diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-08-31 15:10:10 -0700 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-08-31 15:10:10 -0700 |
commit | 221f619bea3a38ab0db479fb12437b2871fc4da7 (patch) | |
tree | 1a848bf175716941a42886cccd79d54236e4a974 | |
parent | 836fa25a822d036230d23b4ed0df9eb22684fdc6 (diff) | |
parent | a1e092d1e8402c2148151c4030df771f97309dd6 (diff) |
Merged in rmlarsen/eigen (pull request PR-221)
Fix bugs to make min- and max reducers work with correctly with IEEE infinities.
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h | 14 |
1 files changed, 10 insertions, 4 deletions
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 <typename T> struct MaxReducer EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void reducePacket(const Packet& p, Packet* accum) const { (*accum) = pmax<Packet>(*accum, p); } - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T initialize() const { - return Eigen::NumTraits<T>::lowest(); + if (Eigen::NumTraits<T>::IsInteger) { + return Eigen::NumTraits<T>::lowest(); + } else { + return -Eigen::NumTraits<T>::infinity(); + } } template <typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet initializePacket() const { @@ -242,9 +245,12 @@ template <typename T> struct MinReducer EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void reducePacket(const Packet& p, Packet* accum) const { (*accum) = pmin<Packet>(*accum, p); } - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T initialize() const { - return Eigen::NumTraits<T>::highest(); + if (Eigen::NumTraits<T>::IsInteger) { + return Eigen::NumTraits<T>::highest(); + } else { + return Eigen::NumTraits<T>::infinity(); + } } template <typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet initializePacket() const { |