20 #ifndef VC_SCALAR_MATH_H
21 #define VC_SCALAR_MATH_H
31 #define VC_MINMAX(V) \
32 static Vc_ALWAYS_INLINE V min(const V &x, const V &y) { return V(std::min(x.data(), y.data())); } \
33 static Vc_ALWAYS_INLINE V max(const V &x, const V &y) { return V(std::max(x.data(), y.data())); }
59 #if (defined(VC_CLANG) && VC_HAS_BUILTIN(__builtin_sincosf)) || (!defined(VC_CLANG) && defined(__GNUC__) && !defined(_WIN32))
61 #elif defined(_GNU_SOURCE)
71 #if (defined(VC_CLANG) && VC_HAS_BUILTIN(__builtin_sincos)) || (!defined(VC_CLANG) && defined(__GNUC__) && !defined(_WIN32))
73 #elif defined(_GNU_SOURCE)
106 #if (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600) || defined(_ISOC99_SOURCE) || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
116 static Vc_ALWAYS_INLINE V log2(const V &x) \
118 return V(std::log(x.data()) / c_ln2<V::EntryType>()); \
141 #if __cplusplus >= 201103
165 template<
typename T>
bool _realIsEvenHalf(
T x) {
169 return (x - f) == half;
203 #elif defined(__INTEL_COMPILER)
216 #elif defined(__INTEL_COMPILER)
232 const float r = ::frexpf(x.
data(), &ee);
253 #endif // VC_SCALAR_MATH_H
#define VC_ALL_VECTOR_TYPES(macro)
Namespace for new ROOT classes and functions.
static Vc_ALWAYS_INLINE Vector< T > log10(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > log(const Vector< T > &x)
Vc_ALWAYS_INLINE ushort_v abs(const ushort_v &x)
static Vc_ALWAYS_INLINE Vector< T > floor(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T >::Mask isfinite(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > sqrt(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > asin(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T >::Mask isnan(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > reciprocal(const Vector< T > &x)
#define Vc_buildDouble(sign, mantissa, exponent)
VECTOR_NAMESPACE::double_v double_v
#define VC_ALL_FLOAT_VECTOR_TYPES(macro)
Vector< sfloat > sfloat_v
static Vc_ALWAYS_INLINE Vector< T > round(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > cos(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > exp(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > rsqrt(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > sin(const Vector< T > &x)
Vector< double > double_v
#define Vc_buildFloat(sign, mantissa, exponent)
Vc_ALWAYS_INLINE Vector< float > ldexp(Vector< float > x, Vector< int > e)
static Vc_ALWAYS_INLINE Vector< T > ceil(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > trunc(const Vector< T > &x)
double atan2(double, double)
static Vc_ALWAYS_INLINE Vector< T > abs(const Vector< T > &x)
static Vc_ALWAYS_INLINE Vector< T > atan(const Vector< T > &x)
static Vc_ALWAYS_INLINE void sincos(const Vector< T > &x, Vector< T > *sin, Vector< T > *cos)
Vector< T > trunc(VC_ALIGNED_PARAMETER(Vector< T >) _v)
Vc_ALWAYS_INLINE Vector< float > frexp(Vector< float > x, Vector< int > *e)
static Vc_ALWAYS_INLINE Vector< T > atan2(const Vector< T > &x, const Vector< T > &y)
DetermineEntryType< T >::Type EntryType
Vc_ALWAYS_INLINE EntryType & data()