mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-10 18:59:01 +08:00
Fix psign for unsigned integer types, such as bool.
This commit is contained in:
parent
1a09defce7
commit
6aad0f821b
@ -855,7 +855,7 @@ Packet psqrt_complex(const Packet& a) {
|
||||
|
||||
/** \internal \returns -1 if a is strictly negative, 0 otherwise, +1 if a is
|
||||
strictly positive. */
|
||||
template<typename Packet>
|
||||
template<typename Packet>
|
||||
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
|
||||
std::enable_if_t<(!NumTraits<typename unpacket_traits<Packet>::type>::IsComplex &&
|
||||
!NumTraits<typename unpacket_traits<Packet>::type>::IsInteger), Packet>
|
||||
@ -877,6 +877,7 @@ psign(const Packet& a) {
|
||||
template<typename Packet>
|
||||
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
|
||||
std::enable_if_t<(!NumTraits<typename unpacket_traits<Packet>::type>::IsComplex &&
|
||||
NumTraits<typename unpacket_traits<Packet>::type>::IsSigned &&
|
||||
NumTraits<typename unpacket_traits<Packet>::type>::IsInteger), Packet>
|
||||
psign(const Packet& a) {
|
||||
using Scalar = typename unpacket_traits<Packet>::type;
|
||||
@ -892,6 +893,20 @@ psign(const Packet& a) {
|
||||
return por(positive, negative);
|
||||
}
|
||||
|
||||
template<typename Packet>
|
||||
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
|
||||
std::enable_if_t<(!NumTraits<typename unpacket_traits<Packet>::type>::IsComplex &&
|
||||
!NumTraits<typename unpacket_traits<Packet>::type>::IsSigned &&
|
||||
NumTraits<typename unpacket_traits<Packet>::type>::IsInteger), Packet>
|
||||
psign(const Packet& a) {
|
||||
using Scalar = typename unpacket_traits<Packet>::type;
|
||||
const Packet cst_one = pset1<Packet>(Scalar(1));
|
||||
const Packet cst_zero = pzero(a);
|
||||
|
||||
const Packet zero_mask = pcmp_eq(cst_zero, a);
|
||||
return pandnot(cst_one, zero_mask);
|
||||
}
|
||||
|
||||
// \internal \returns the the sign of a complex number z, defined as z / abs(z).
|
||||
template<typename Packet>
|
||||
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
|
||||
|
@ -218,7 +218,6 @@ template<> struct packet_traits<bool> : default_packet_traits
|
||||
HasMin = 0,
|
||||
HasMax = 0,
|
||||
HasConj = 0,
|
||||
HasSign = 0,
|
||||
HasSqrt = 1
|
||||
};
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user