aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Core/GenericPacketMath.h3
-rw-r--r--test/packetmath.cpp10
2 files changed, 8 insertions, 5 deletions
diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h
index adf431b4c..7f35b3114 100644
--- a/Eigen/src/Core/GenericPacketMath.h
+++ b/Eigen/src/Core/GenericPacketMath.h
@@ -524,7 +524,8 @@ template<typename Packet> EIGEN_DEVICE_FUNC inline bool predux_any(const Packet&
// - bits full of ones (NaN for floats),
// - or first bit equals to 1 (1 for ints, smallest denormal for floats).
// For all these cases, taking the sum is just fine, and this boils down to a no-op for scalars.
- return bool(numext::not_equal_strict(predux(a), pzero(a)));
+ typedef typename unpacket_traits<Packet>::type Scalar;
+ return numext::not_equal_strict(predux(a), Scalar(0));
}
/** \internal \returns the reversed elements of \a a*/
diff --git a/test/packetmath.cpp b/test/packetmath.cpp
index 032c0e4c8..540cf6a86 100644
--- a/test/packetmath.cpp
+++ b/test/packetmath.cpp
@@ -447,18 +447,20 @@ template<typename Scalar,typename Packet> void packetmath_real()
VERIFY((numext::isnan)(data2[0]));
}
- {
+ if (PacketTraits::HasExp) {
internal::scalar_logistic_op<Scalar> logistic;
for (int i=0; i<size; ++i)
{
data1[i] = internal::random<Scalar>(-20,20);
}
- internal::pstore(data2, logistic.packetOp(internal::pload<Packet>(data1)));
+
+ test::packet_helper<PacketTraits::HasExp,Packet> h;
+ h.store(data2, logistic.packetOp(h.load(data1)));
for (int i=0; i<PacketSize; ++i) {
VERIFY_IS_APPROX(data2[i],logistic(data1[i]));
- #ifdef EIGEN_VECTORIZE // don't check for exactness when using the i387 FPU
+#ifdef EIGEN_VECTORIZE // don't check for exactness when using the i387 FPU
VERIFY_IS_EQUAL(data2[i],logistic(data1[i]));
- #endif
+#endif
}
}