CUDA support: define more accurate min/max values for device::numeric_limits of float and double using values from cfloat header

This commit is contained in:
Gael Guennebaud 2015-10-28 16:49:15 +01:00
parent 28ddb5158d
commit 6759a21e49

View File

@ -11,6 +11,10 @@
#ifndef EIGEN_META_H #ifndef EIGEN_META_H
#define EIGEN_META_H #define EIGEN_META_H
#if defined(__CUDA_ARCH__)
#include <cfloat>
#endif
namespace Eigen { namespace Eigen {
namespace internal { namespace internal {
@ -138,16 +142,16 @@ template<> struct numeric_limits<float>
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static float (max)() { return CUDART_MAX_NORMAL_F; } static float (max)() { return CUDART_MAX_NORMAL_F; }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static float (min)() { return __FLT_EPSILON__; } static float (min)() { return FLT_MIN; }
}; };
template<> struct numeric_limits<double> template<> struct numeric_limits<double>
{ {
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static double epsilon() { return __DBL_EPSILON__; } static double epsilon() { return __DBL_EPSILON__; }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static double (max)() { return CUDART_INF; } static double (max)() { return DBL_MAX; }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static double (min)() { return __DBL_EPSILON__; } static double (min)() { return DBL_MIN; }
}; };
template<> struct numeric_limits<int> template<> struct numeric_limits<int>
{ {