aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h
diff options
context:
space:
mode:
authorGravatar Rasmus Munk Larsen <rmlarsen@google.com>2016-08-31 15:04:16 -0700
committerGravatar Rasmus Munk Larsen <rmlarsen@google.com>2016-08-31 15:04:16 -0700
commita1e092d1e8402c2148151c4030df771f97309dd6 (patch)
tree368b0763a223744d4aed9422567ad4c615c62fbb /unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h
parent7ae819123c38b2397bbb0922f5d16e53e4fac42c (diff)
Fix bugs to make min- and max reducers with correctly with IEEE infinities.
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h')
-rw-r--r--unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h14
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 {