mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 03:39:01 +08:00
Eliminate round_impl
double-promotion warnings for c++03.
This commit is contained in:
parent
748489ef9c
commit
87729ea39f
@ -485,14 +485,31 @@ struct round_impl
|
|||||||
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
|
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
|
||||||
#if EIGEN_HAS_CXX11_MATH
|
#if EIGEN_HAS_CXX11_MATH
|
||||||
EIGEN_USING_STD(round);
|
EIGEN_USING_STD(round);
|
||||||
return Scalar(round(x));
|
#endif
|
||||||
#elif EIGEN_HAS_C99_MATH
|
|
||||||
if (is_same<Scalar, float>::value) {
|
|
||||||
return Scalar(::roundf(x));
|
|
||||||
} else {
|
|
||||||
return Scalar(round(x));
|
return Scalar(round(x));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !EIGEN_HAS_CXX11_MATH
|
||||||
|
#if EIGEN_HAS_C99_MATH
|
||||||
|
// Use ::roundf for float.
|
||||||
|
template<>
|
||||||
|
struct round_impl<float> {
|
||||||
|
EIGEN_DEVICE_FUNC
|
||||||
|
static inline float run(const float& x)
|
||||||
|
{
|
||||||
|
return ::roundf(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
#else
|
#else
|
||||||
|
template<typename Scalar>
|
||||||
|
struct round_using_floor_ceil_impl
|
||||||
|
{
|
||||||
|
EIGEN_DEVICE_FUNC
|
||||||
|
static inline Scalar run(const Scalar& x)
|
||||||
|
{
|
||||||
|
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex), NUMERIC_TYPE_MUST_BE_REAL)
|
||||||
|
// Without C99 round/roundf, resort to floor/ceil.
|
||||||
EIGEN_USING_STD(floor);
|
EIGEN_USING_STD(floor);
|
||||||
EIGEN_USING_STD(ceil);
|
EIGEN_USING_STD(ceil);
|
||||||
// If not enough precision to resolve a decimal at all, return the input.
|
// If not enough precision to resolve a decimal at all, return the input.
|
||||||
@ -502,10 +519,17 @@ struct round_impl
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
return (x > Scalar(0)) ? Scalar(floor(x + Scalar(0.5))) : Scalar(ceil(x - Scalar(0.5)));
|
return (x > Scalar(0)) ? Scalar(floor(x + Scalar(0.5))) : Scalar(ceil(x - Scalar(0.5)));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct round_impl<float> : round_using_floor_ceil_impl<float> {};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct round_impl<double> : round_using_floor_ceil_impl<double> {};
|
||||||
|
#endif // EIGEN_HAS_C99_MATH
|
||||||
|
#endif // !EIGEN_HAS_CXX11_MATH
|
||||||
|
|
||||||
template<typename Scalar>
|
template<typename Scalar>
|
||||||
struct round_retval
|
struct round_retval
|
||||||
{
|
{
|
||||||
|
@ -562,11 +562,14 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 atanh(const bfloat16& a) {
|
|||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 floor(const bfloat16& a) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 floor(const bfloat16& a) {
|
||||||
return bfloat16(::floorf(float(a)));
|
return bfloat16(::floorf(float(a)));
|
||||||
}
|
}
|
||||||
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 ceil(const bfloat16& a) {
|
||||||
|
return bfloat16(::ceilf(float(a)));
|
||||||
|
}
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 rint(const bfloat16& a) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 rint(const bfloat16& a) {
|
||||||
return bfloat16(::rintf(float(a)));
|
return bfloat16(::rintf(float(a)));
|
||||||
}
|
}
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 ceil(const bfloat16& a) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 round(const bfloat16& a) {
|
||||||
return bfloat16(::ceilf(float(a)));
|
return bfloat16(::roundf(float(a)));
|
||||||
}
|
}
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 fmod(const bfloat16& a, const bfloat16& b) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 fmod(const bfloat16& a, const bfloat16& b) {
|
||||||
return bfloat16(::fmodf(float(a), float(b)));
|
return bfloat16(::fmodf(float(a), float(b)));
|
||||||
|
@ -718,9 +718,6 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half floor(const half& a) {
|
|||||||
return half(::floorf(float(a)));
|
return half(::floorf(float(a)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half rint(const half& a) {
|
|
||||||
return half(::rintf(float(a)));
|
|
||||||
}
|
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half ceil(const half& a) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half ceil(const half& a) {
|
||||||
#if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 300) || \
|
#if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 300) || \
|
||||||
defined(EIGEN_HIP_DEVICE_COMPILE)
|
defined(EIGEN_HIP_DEVICE_COMPILE)
|
||||||
@ -729,6 +726,12 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half ceil(const half& a) {
|
|||||||
return half(::ceilf(float(a)));
|
return half(::ceilf(float(a)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half rint(const half& a) {
|
||||||
|
return half(::rintf(float(a)));
|
||||||
|
}
|
||||||
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half round(const half& a) {
|
||||||
|
return half(::roundf(float(a)));
|
||||||
|
}
|
||||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half fmod(const half& a, const half& b) {
|
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half fmod(const half& a, const half& b) {
|
||||||
return half(::fmodf(float(a), float(b)));
|
return half(::fmodf(float(a), float(b)));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user