10 #ifndef EIGEN_NUMTRAITS_H
11 #define EIGEN_NUMTRAITS_H
20 bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
21 bool is_integer = NumTraits<T>::IsInteger>
24 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
25 static int run() {
return std::numeric_limits<T>::digits10; }
31 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
35 typedef typename NumTraits<T>::Real Real;
43 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
44 static int run() {
return 0; }
51 bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
55 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
56 static int run() {
return std::numeric_limits<T>::digits; }
62 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
66 typedef typename NumTraits<T>::Real Real;
74 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
75 static int run() {
return 0; }
84 template <
typename Tgt,
typename Src>
85 EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Tgt bit_cast(
const Src& src) {
86 #if EIGEN_HAS_TYPE_TRAITS
88 EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Src>::value, THIS_TYPE_IS_NOT_SUPPORTED);
89 EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Tgt>::value && std::is_default_constructible<Tgt>::value,
90 THIS_TYPE_IS_NOT_SUPPORTED);
93 EIGEN_STATIC_ASSERT(
sizeof(Src) ==
sizeof(Tgt), THIS_TYPE_IS_NOT_SUPPORTED);
95 EIGEN_USING_STD(memcpy)
96 memcpy(&tgt, &src,
sizeof(Tgt));
146 IsInteger = std::numeric_limits<T>::is_integer,
147 IsSigned = std::numeric_limits<T>::is_signed,
164 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
165 static inline Real epsilon()
167 return numext::numeric_limits<T>::epsilon();
170 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
171 static inline int digits10()
176 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
177 static inline int digits()
182 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
183 static inline Real dummy_precision()
190 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
191 static inline T highest() {
192 return (numext::numeric_limits<T>::max)();
195 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
196 static inline T lowest() {
197 return IsInteger ? (numext::numeric_limits<T>::min)()
198 :
static_cast<T
>(-(numext::numeric_limits<T>::max)());
201 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
202 static inline T infinity() {
203 return numext::numeric_limits<T>::infinity();
206 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
207 static inline T quiet_NaN() {
208 return numext::numeric_limits<T>::quiet_NaN();
218 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
219 static inline float dummy_precision() {
return 1e-5f; }
224 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
225 static inline double dummy_precision() {
return 1e-12; }
232 static inline long double dummy_precision() {
return 1e-15l; }
235 template<
typename _Real>
struct NumTraits<std::complex<_Real> >
248 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
250 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
252 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
256 template<
typename Scalar,
int Rows,
int Cols,
int Options,
int MaxRows,
int MaxCols>
271 RequireInitialization = 1,
277 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
279 EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
290 RequireInitialization = 1,
297 static inline int digits10() {
return 0; }
300 static inline std::string epsilon();
301 static inline std::string dummy_precision();
302 static inline std::string lowest();
303 static inline std::string highest();
304 static inline std::string infinity();
305 static inline std::string quiet_NaN();
315 #endif // EIGEN_NUMTRAITS_H