mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-06 19:29:08 +08:00
add highest and lowest functions to NumTraits
This commit is contained in:
parent
fe0827495a
commit
bb290977b8
@ -34,7 +34,7 @@
|
||||
* \c std::complex<float>, \c std::complex<double>, and \c long \c double (especially
|
||||
* useful to enforce x87 arithmetics when SSE is the default).
|
||||
*
|
||||
* The provided data consists of:
|
||||
* The provided data consists of everything that is supported by std::numeric_limits, plus:
|
||||
* \li A typedef \a Real, giving the "real part" type of \a T. If \a T is already real,
|
||||
* then \a Real is just a typedef to \a T. If \a T is \c std::complex<U> then \a Real
|
||||
* is a typedef to \a U.
|
||||
@ -45,11 +45,29 @@
|
||||
* type, and to 0 otherwise.
|
||||
* \li An enum \a HasFloatingPoint. It is equal to \c 0 if \a T is \c int,
|
||||
* and to \c 1 otherwise.
|
||||
* \li An epsilon() function which, unlike std::numeric_limits::epsilon(), returns a \a Real instead of a \a T.
|
||||
* \li A dummy_precision() function returning a weak epsilon value. It is mainly used by the fuzzy comparison operators.
|
||||
* \li Two higest() and lowest() functions returning the higest and lowest possible values respectively.
|
||||
*/
|
||||
template<typename T> struct NumTraits;
|
||||
|
||||
template<typename T> struct ei_default_float_numtraits
|
||||
: std::numeric_limits<T>
|
||||
{
|
||||
inline static T higest() { return std::numeric_limits<T>::max(); }
|
||||
inline static T lowest() { return -std::numeric_limits<T>::max(); }
|
||||
};
|
||||
|
||||
template<typename T> struct ei_default_integral_numtraits
|
||||
: std::numeric_limits<T>
|
||||
{
|
||||
inline static int dummy_precision() { return 0; }
|
||||
inline static T highest() { return std::numeric_limits<T>::max(); }
|
||||
inline static T lowest() { return std::numeric_limits<T>::min(); }
|
||||
};
|
||||
|
||||
template<> struct NumTraits<int>
|
||||
: std::numeric_limits<int>
|
||||
: ei_default_integral_numtraits<int>
|
||||
{
|
||||
typedef int Real;
|
||||
typedef double FloatingPoint;
|
||||
@ -61,12 +79,10 @@ template<> struct NumTraits<int>
|
||||
AddCost = 1,
|
||||
MulCost = 1
|
||||
};
|
||||
|
||||
inline static int dummy_precision() { return 0; }
|
||||
};
|
||||
|
||||
template<> struct NumTraits<float>
|
||||
: std::numeric_limits<float>
|
||||
: ei_default_float_numtraits<float>
|
||||
{
|
||||
typedef float Real;
|
||||
typedef float FloatingPoint;
|
||||
@ -83,7 +99,7 @@ template<> struct NumTraits<float>
|
||||
};
|
||||
|
||||
template<> struct NumTraits<double>
|
||||
: std::numeric_limits<double>
|
||||
: ei_default_float_numtraits<double>
|
||||
{
|
||||
typedef double Real;
|
||||
typedef double FloatingPoint;
|
||||
@ -100,7 +116,7 @@ template<> struct NumTraits<double>
|
||||
};
|
||||
|
||||
template<typename _Real> struct NumTraits<std::complex<_Real> >
|
||||
: std::numeric_limits<std::complex<_Real> >
|
||||
: ei_default_float_numtraits<std::complex<_Real> >
|
||||
{
|
||||
typedef _Real Real;
|
||||
typedef std::complex<_Real> FloatingPoint;
|
||||
@ -118,7 +134,7 @@ template<typename _Real> struct NumTraits<std::complex<_Real> >
|
||||
};
|
||||
|
||||
template<> struct NumTraits<long long int>
|
||||
: std::numeric_limits<long long int>
|
||||
: ei_default_integral_numtraits<long long int>
|
||||
{
|
||||
typedef long long int Real;
|
||||
typedef long double FloatingPoint;
|
||||
@ -133,7 +149,7 @@ template<> struct NumTraits<long long int>
|
||||
};
|
||||
|
||||
template<> struct NumTraits<long double>
|
||||
: std::numeric_limits<long double>
|
||||
: ei_default_float_numtraits<long double>
|
||||
{
|
||||
typedef long double Real;
|
||||
typedef long double FloatingPoint;
|
||||
@ -150,7 +166,7 @@ template<> struct NumTraits<long double>
|
||||
};
|
||||
|
||||
template<> struct NumTraits<bool>
|
||||
: std::numeric_limits<bool>
|
||||
: ei_default_integral_numtraits<bool>
|
||||
{
|
||||
typedef bool Real;
|
||||
typedef float FloatingPoint;
|
||||
@ -162,8 +178,6 @@ template<> struct NumTraits<bool>
|
||||
AddCost = 1,
|
||||
MulCost = 1
|
||||
};
|
||||
|
||||
inline static bool dummy_precision() { return 0; }
|
||||
};
|
||||
|
||||
#endif // EIGEN_NUMTRAITS_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user