mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-01 08:14:10 +08:00
Move the functions operating on fp16 out of the std namespace and into the Eigen::numext namespace
This commit is contained in:
parent
dc45aaeb93
commit
737644366f
@ -389,6 +389,29 @@ static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isnan)(const Eigen::half& a)
|
|||||||
return (a.x & 0x7fff) > 0x7c00;
|
return (a.x & 0x7fff) > 0x7c00;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isfinite)(const Eigen::half& a) {
|
||||||
|
return !(Eigen::numext::isinf)(a) && !(Eigen::numext::isnan)(a);
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half abs(const Eigen::half& a) {
|
||||||
|
Eigen::half result;
|
||||||
|
result.x = a.x & 0x7FFF;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half exp(const Eigen::half& a) {
|
||||||
|
return Eigen::half(::expf(float(a)));
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half log(const Eigen::half& a) {
|
||||||
|
return Eigen::half(::logf(float(a)));
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half sqrt(const Eigen::half& a) {
|
||||||
|
return Eigen::half(::sqrtf(float(a)));
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half floor(const Eigen::half& a) {
|
||||||
|
return Eigen::half(::floorf(float(a)));
|
||||||
|
}
|
||||||
|
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half ceil(const Eigen::half& a) {
|
||||||
|
return Eigen::half(::ceilf(float(a)));
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace numext
|
} // end namespace numext
|
||||||
|
|
||||||
@ -428,36 +451,6 @@ static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC int (isfinite)(const Eigen::half& a
|
|||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
|
|
||||||
// Import the standard mathematical functions and trancendentals into the
|
|
||||||
// into the std namespace.
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half abs(const Eigen::half& a) {
|
|
||||||
return ::fabsh(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half exp(const Eigen::half& a) {
|
|
||||||
return ::exph(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half log(const Eigen::half& a) {
|
|
||||||
return ::logh(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half sqrt(const Eigen::half& a) {
|
|
||||||
return ::sqrth(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half floor(const Eigen::half& a) {
|
|
||||||
return ::floorh(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half ceil(const Eigen::half& a) {
|
|
||||||
return ::ceilh(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC int (isnan)(const Eigen::half& a) {
|
|
||||||
return (Eigen::numext::isnan)(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC int (isinf)(const Eigen::half& a) {
|
|
||||||
return (Eigen::numext::isinf)(a);
|
|
||||||
}
|
|
||||||
static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isfinite)(const Eigen::half& a) {
|
|
||||||
return !(Eigen::numext::isinf)(a) && !(Eigen::numext::isnan)(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if __cplusplus > 199711L
|
#if __cplusplus > 199711L
|
||||||
template <>
|
template <>
|
||||||
struct hash<Eigen::half> {
|
struct hash<Eigen::half> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user