Addendum to bug #859: pexp(NaN) for double did not return NaN, also, plog(NaN) did not return NaN.

psqrt(NaN) and psqrt(-1) shall return NaN if EIGEN_FAST_MATH==0
This commit is contained in:
Christoph Hertzberg
2014-10-20 13:35:03 +02:00
parent 00ec1629ca
commit 13c636d864
2 changed files with 17 additions and 3 deletions

View File

@@ -253,8 +253,22 @@ template<typename Scalar> void packetmath_real()
}
if(internal::random<float>(0,1)<0.1)
data1[internal::random<int>(0, PacketSize)] = 0;
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasLog, std::log, internal::plog);
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasSqrt, std::sqrt, internal::psqrt);
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasLog, std::log, internal::plog);
{
data1[0] = std::numeric_limits<Scalar>::quiet_NaN();
packet_helper<internal::packet_traits<Scalar>::HasLog,Packet> h;
h.store(data2, internal::plog(h.load(data1)));
VERIFY(isNaN(data2[0]));
data1[0] = -1.0f;
h.store(data2, internal::plog(h.load(data1)));
VERIFY(isNaN(data2[0]));
#if !EIGEN_FAST_MATH
h.store(data2, internal::psqrt(h.load(data1)));
VERIFY(isNaN(data2[0]));
VERIFY(isNaN(data2[1]));
#endif
}
}
template<typename Scalar> void packetmath_notcomplex()