00001 00008 /***************************************************************************** 00009 ** Includes 00010 *****************************************************************************/ 00011 00012 #include <limits> 00013 #include "../../include/ecl/type_traits/numeric_limits.hpp" 00014 00015 /***************************************************************************** 00016 ** Namespaces 00017 *****************************************************************************/ 00018 00019 namespace ecl { 00020 00021 /***************************************************************************** 00022 ** Static Variables 00023 *****************************************************************************/ 00028 const char numeric_limits<char>::one; 00029 const uint16 numeric_limits<char>::bits; 00030 const uint16 numeric_limits<char>::bytes; 00031 const char numeric_limits<char>::minimum; 00032 const char numeric_limits<char>::maximum; 00033 00034 const unsigned char numeric_limits<unsigned char>::one; 00035 const uint16 numeric_limits<unsigned char>::bits; 00036 const uint16 numeric_limits<unsigned char>::bytes; 00037 const unsigned char numeric_limits<unsigned char>::minimum; 00038 const unsigned char numeric_limits<unsigned char>::maximum; 00039 00040 00041 const int16 numeric_limits<int16>::one; 00042 const uint16 numeric_limits<int16>::bits; 00043 const uint16 numeric_limits<int16>::bytes; 00044 const int16 numeric_limits<int16>::minimum; 00045 const int16 numeric_limits<int16>::maximum; 00046 00047 const uint16 numeric_limits<uint16>::one; 00048 const uint16 numeric_limits<uint16>::bits; 00049 const uint16 numeric_limits<uint16>::bytes; 00050 const uint16 numeric_limits<uint16>::minimum; 00051 const uint16 numeric_limits<uint16>::maximum; 00052 00053 const int32 numeric_limits<int32>::one; 00054 const uint16 numeric_limits<int32>::bits; 00055 const uint16 numeric_limits<int32>::bytes; 00056 const int32 numeric_limits<int32>::minimum; 00057 const int32 numeric_limits<int32>::maximum; 00058 00059 const uint32 numeric_limits<uint32>::one; 00060 const uint16 numeric_limits<uint32>::bits; 00061 const uint16 numeric_limits<uint32>::bytes; 00062 const uint32 numeric_limits<uint32>::minimum; 00063 const uint32 numeric_limits<uint32>::maximum; 00064 00065 const int64 numeric_limits<int64>::one; 00066 const uint16 numeric_limits<int64>::bits; 00067 const uint16 numeric_limits<int64>::bytes; 00068 const int64 numeric_limits<int64>::minimum; 00069 const int64 numeric_limits<int64>::maximum; 00070 00071 const uint64 numeric_limits<uint64>::one; 00072 const uint16 numeric_limits<uint64>::bits; 00073 const uint16 numeric_limits<uint64>::bytes; 00074 const uint64 numeric_limits<uint64>::minimum; 00075 const uint64 numeric_limits<uint64>::maximum; 00076 00077 /* Dummy precision is a useful concept borrowed from eigen. It is used to help define 00078 * fuzzy operators which is especially handy for comparing floats which are notorious with 00079 * a strict '=' operator. 00080 * 00081 * @sa eigen/include/ecl/Eigen3/src/Core/NumTraits.h 00082 */ 00083 const numeric_limits<char>::Precision numeric_limits<char>::dummy_precision = 1e-5f; 00084 const numeric_limits<unsigned char>::Precision numeric_limits<unsigned char>::dummy_precision = 1e-5f; 00085 const numeric_limits<short>::Precision numeric_limits<short>::dummy_precision = 1e-5f; 00086 const numeric_limits<unsigned short>::Precision numeric_limits<unsigned short>::dummy_precision = 1e-5f; 00087 const numeric_limits<int>::Precision numeric_limits<int>::dummy_precision = 0.0; 00088 const numeric_limits<unsigned int>::Precision numeric_limits<unsigned int>::dummy_precision = 0.0; 00089 const numeric_limits<long>::Precision numeric_limits<long>::dummy_precision = 0.0; 00090 const numeric_limits<unsigned long>::Precision numeric_limits<unsigned long>::dummy_precision = 0.0; 00091 const numeric_limits<long long>::Precision numeric_limits<long long>::dummy_precision = 0.0; 00092 const numeric_limits<unsigned long long>::Precision numeric_limits<unsigned long long>::dummy_precision = 0.0; 00093 00094 const float numeric_limits<float>::minimum = -std::numeric_limits<float>::max(); 00095 const float numeric_limits<float>::maximum = std::numeric_limits<float>::max(); 00096 const float numeric_limits<float>::dummy_precision = 1e-5f; 00097 00098 const double numeric_limits<double>::minimum = -std::numeric_limits<double>::max(); 00099 const double numeric_limits<double>::maximum = std::numeric_limits<double>::max(); 00100 const double numeric_limits<double>::dummy_precision = 1e-12; 00101 00102 const long double numeric_limits<long double>::minimum = -std::numeric_limits<long double>::max(); 00103 const long double numeric_limits<long double>::maximum = std::numeric_limits<long double>::max(); 00104 const long double numeric_limits<long double>::dummy_precision = 1e-15; 00108 } // namespace ecl