Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-13 08:39:58

0001 //  Copyright (c) 2024 Matt Borland
0002 //  Use, modification and distribution are subject to the
0003 //  Boost Software License, Version 1.0. (See accompanying file
0004 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0005 //
0006 //  Regular use of std::numeric_limits functions can not be used on 
0007 //  GPU platforms like CUDA since they are missing the __device__ marker
0008 //  and libcu++ does not provide something analogous.
0009 //  Rather than using giant if else blocks make our own version of numeric limits
0010 //
0011 //  On the CUDA NVRTC platform we use a best attempt at emulating the functions
0012 //  and values since we do not have any macros to go off of.
0013 //  Use the values as found on GCC 11.4 RHEL 9.4 x64
0014 
0015 #ifndef BOOST_MATH_TOOLS_NUMERIC_LIMITS_HPP
0016 #define BOOST_MATH_TOOLS_NUMERIC_LIMITS_HPP
0017 
0018 #include <boost/math/tools/config.hpp>
0019 
0020 #ifndef BOOST_MATH_HAS_NVRTC
0021 
0022 #include <type_traits>
0023 #include <limits>
0024 #include <climits>
0025 #include <cfloat>
0026 
0027 #endif
0028 
0029 namespace boost {
0030 namespace math {
0031 
0032 template <typename T>
0033 struct numeric_limits 
0034 #ifndef BOOST_MATH_HAS_NVRTC
0035 : public std::numeric_limits<T> {};
0036 #else
0037 {};
0038 #endif
0039 
0040 #if defined(BOOST_MATH_HAS_GPU_SUPPORT) && !defined(BOOST_MATH_HAS_NVRTC)
0041 
0042 template <>
0043 struct numeric_limits<float>
0044 {
0045     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<float>::is_specialized;
0046     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<float>::is_signed;
0047     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<float>::is_integer;
0048     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<float>::is_exact;
0049     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<float>::has_infinity;
0050     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<float>::has_quiet_NaN;
0051     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<float>::has_signaling_NaN;
0052 
0053     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<float>::round_style;
0054     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<float>::is_iec559;
0055     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<float>::is_bounded;
0056     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<float>::is_modulo;
0057     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<float>::digits;
0058     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<float>::digits10;
0059     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<float>::max_digits10;
0060     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<float>::radix;
0061     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<float>::min_exponent;
0062     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<float>::min_exponent10;
0063     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<float>::max_exponent;
0064     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<float>::max_exponent10;
0065     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<float>::traps;
0066     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<float>::tinyness_before;
0067 
0068     // Member Functions
0069     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (min)         () { return FLT_MIN; }
0070     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (max)         () { return FLT_MAX; }
0071     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float lowest        () { return -FLT_MAX; }
0072     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float epsilon       () { return FLT_EPSILON; }
0073     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float round_error   () { return 0.5F; }
0074     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float infinity      () { return static_cast<float>(INFINITY); }
0075     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float quiet_NaN     () { return static_cast<float>(NAN); }
0076     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float signaling_NaN () 
0077     { 
0078         #ifdef FLT_SNAN
0079         return FLT_SNAN;
0080         #else
0081         return static_cast<float>(NAN);
0082         #endif
0083     }
0084     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float denorm_min    () { return FLT_TRUE_MIN; }
0085 };
0086 
0087 template <>
0088 struct numeric_limits<double>
0089 {
0090     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<double>::is_specialized;
0091     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<double>::is_signed;
0092     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<double>::is_integer;
0093     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<double>::is_exact;
0094     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<double>::has_infinity;
0095     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<double>::has_quiet_NaN;
0096     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<double>::has_signaling_NaN;
0097 
0098     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<double>::round_style;
0099     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<double>::is_iec559;
0100     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<double>::is_bounded;
0101     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<double>::is_modulo;
0102     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<double>::digits;
0103     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<double>::digits10;
0104     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<double>::max_digits10;
0105     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<double>::radix;
0106     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<double>::min_exponent;
0107     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<double>::min_exponent10;
0108     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<double>::max_exponent;
0109     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<double>::max_exponent10;
0110     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<double>::traps;
0111     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<double>::tinyness_before;
0112 
0113     // Member Functions
0114     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (min)         () { return DBL_MIN; }
0115     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (max)         () { return DBL_MAX; }
0116     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double lowest        () { return -DBL_MAX; }
0117     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double epsilon       () { return DBL_EPSILON; }
0118     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double round_error   () { return 0.5; }
0119     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double infinity      () { return static_cast<double>(INFINITY); }
0120     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double quiet_NaN     () { return static_cast<double>(NAN); }
0121     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double signaling_NaN () 
0122     { 
0123         #ifdef DBL_SNAN
0124         return DBL_SNAN;
0125         #else
0126         return static_cast<double>(NAN);
0127         #endif
0128     }
0129     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double denorm_min    () { return DBL_TRUE_MIN; }
0130 };
0131 
0132 template <>
0133 struct numeric_limits<short>
0134 {
0135     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<short>::is_specialized;
0136     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<short>::is_signed;
0137     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<short>::is_integer;
0138     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<short>::is_exact;
0139     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<short>::has_infinity;
0140     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<short>::has_quiet_NaN;
0141     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<short>::has_signaling_NaN;
0142 
0143     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<short>::round_style;
0144     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<short>::is_iec559;
0145     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<short>::is_bounded;
0146     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<short>::is_modulo;
0147     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<short>::digits;
0148     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<short>::digits10;
0149     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<short>::max_digits10;
0150     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<short>::radix;
0151     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<short>::min_exponent;
0152     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<short>::min_exponent10;
0153     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<short>::max_exponent;
0154     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<short>::max_exponent10;
0155     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<short>::traps;
0156     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<short>::tinyness_before;
0157 
0158     // Member Functions
0159     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (min)         () { return SHRT_MIN; }
0160     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (max)         () { return SHRT_MAX; }
0161     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short lowest        () { return SHRT_MIN; }
0162     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short epsilon       () { return 0; }
0163     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short round_error   () { return 0; }
0164     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short infinity      () { return 0; }
0165     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short quiet_NaN     () { return 0; }
0166     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short signaling_NaN () { return 0; }
0167     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short denorm_min    () { return 0; }
0168 };
0169 
0170 template <>
0171 struct numeric_limits<unsigned short>
0172 {
0173     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned short>::is_specialized;
0174     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned short>::is_signed;
0175     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned short>::is_integer;
0176     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned short>::is_exact;
0177     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned short>::has_infinity;
0178     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned short>::has_quiet_NaN;
0179     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned short>::has_signaling_NaN;
0180 
0181     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned short>::round_style;
0182     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned short>::is_iec559;
0183     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned short>::is_bounded;
0184     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned short>::is_modulo;
0185     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned short>::digits;
0186     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned short>::digits10;
0187     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned short>::max_digits10;
0188     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned short>::radix;
0189     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned short>::min_exponent;
0190     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned short>::min_exponent10;
0191     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned short>::max_exponent;
0192     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned short>::max_exponent10;
0193     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned short>::traps;
0194     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned short>::tinyness_before;
0195 
0196     // Member Functions
0197     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (min)         () { return 0; }
0198     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (max)         () { return USHRT_MAX; }
0199     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short lowest        () { return 0; }
0200     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short epsilon       () { return 0; }
0201     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short round_error   () { return 0; }
0202     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short infinity      () { return 0; }
0203     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short quiet_NaN     () { return 0; }
0204     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short signaling_NaN () { return 0; }
0205     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short denorm_min    () { return 0; }
0206 };
0207 
0208 template <>
0209 struct numeric_limits<int>
0210 {
0211     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<int>::is_specialized;
0212     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<int>::is_signed;
0213     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<int>::is_integer;
0214     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<int>::is_exact;
0215     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<int>::has_infinity;
0216     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<int>::has_quiet_NaN;
0217     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<int>::has_signaling_NaN;
0218 
0219     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<int>::round_style;
0220     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<int>::is_iec559;
0221     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<int>::is_bounded;
0222     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<int>::is_modulo;
0223     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<int>::digits;
0224     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<int>::digits10;
0225     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<int>::max_digits10;
0226     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<int>::radix;
0227     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<int>::min_exponent;
0228     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<int>::min_exponent10;
0229     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<int>::max_exponent;
0230     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<int>::max_exponent10;
0231     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<int>::traps;
0232     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<int>::tinyness_before;
0233 
0234     // Member Functions
0235     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (min)         () { return INT_MIN; }
0236     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (max)         () { return INT_MAX; }
0237     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int lowest        () { return INT_MIN; }
0238     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int epsilon       () { return 0; }
0239     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int round_error   () { return 0; }
0240     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int infinity      () { return 0; }
0241     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int quiet_NaN     () { return 0; }
0242     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int signaling_NaN () { return 0; }
0243     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int denorm_min    () { return 0; }
0244 };
0245 
0246 template <>
0247 struct numeric_limits<unsigned int>
0248 {
0249     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned int>::is_specialized;
0250     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned int>::is_signed;
0251     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned int>::is_integer;
0252     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned int>::is_exact;
0253     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned int>::has_infinity;
0254     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned int>::has_quiet_NaN;
0255     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned int>::has_signaling_NaN;
0256 
0257     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned int>::round_style;
0258     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned int>::is_iec559;
0259     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned int>::is_bounded;
0260     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned int>::is_modulo;
0261     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned int>::digits;
0262     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned int>::digits10;
0263     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned int>::max_digits10;
0264     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned int>::radix;
0265     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned int>::min_exponent;
0266     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned int>::min_exponent10;
0267     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned int>::max_exponent;
0268     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned int>::max_exponent10;
0269     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned int>::traps;
0270     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned int>::tinyness_before;
0271 
0272     // Member Functions
0273     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (min)         () { return 0; }
0274     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (max)         () { return UINT_MAX; }
0275     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int lowest        () { return 0; }
0276     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int epsilon       () { return 0; }
0277     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int round_error   () { return 0; }
0278     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int infinity      () { return 0; }
0279     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int quiet_NaN     () { return 0; }
0280     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int signaling_NaN () { return 0; }
0281     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int denorm_min    () { return 0; }
0282 };
0283 
0284 template <>
0285 struct numeric_limits<long>
0286 {
0287     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<long>::is_specialized;
0288     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<long>::is_signed;
0289     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<long>::is_integer;
0290     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<long>::is_exact;
0291     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<long>::has_infinity;
0292     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<long>::has_quiet_NaN;
0293     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<long>::has_signaling_NaN;
0294 
0295     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<long>::round_style;
0296     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<long>::is_iec559;
0297     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<long>::is_bounded;
0298     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<long>::is_modulo;
0299     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<long>::digits;
0300     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<long>::digits10;
0301     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<long>::max_digits10;
0302     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<long>::radix;
0303     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<long>::min_exponent;
0304     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<long>::min_exponent10;
0305     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<long>::max_exponent;
0306     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<long>::max_exponent10;
0307     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<long>::traps;
0308     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<long>::tinyness_before;
0309 
0310     // Member Functions
0311     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (min)         () { return LONG_MIN; }
0312     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (max)         () { return LONG_MAX; }
0313     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long lowest        () { return LONG_MIN; }
0314     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long epsilon       () { return 0; }
0315     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long round_error   () { return 0; }
0316     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long infinity      () { return 0; }
0317     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long quiet_NaN     () { return 0; }
0318     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long signaling_NaN () { return 0; }
0319     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long denorm_min    () { return 0; }
0320 };
0321 
0322 template <>
0323 struct numeric_limits<unsigned long>
0324 {
0325     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned long>::is_specialized;
0326     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned long>::is_signed;
0327     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned long>::is_integer;
0328     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned long>::is_exact;
0329     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned long>::has_infinity;
0330     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned long>::has_quiet_NaN;
0331     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned long>::has_signaling_NaN;
0332 
0333     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned long>::round_style;
0334     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned long>::is_iec559;
0335     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned long>::is_bounded;
0336     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned long>::is_modulo;
0337     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned long>::digits;
0338     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned long>::digits10;
0339     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned long>::max_digits10;
0340     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned long>::radix;
0341     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned long>::min_exponent;
0342     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned long>::min_exponent10;
0343     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned long>::max_exponent;
0344     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned long>::max_exponent10;
0345     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned long>::traps;
0346     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned long>::tinyness_before;
0347 
0348     // Member Functions
0349     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (min)         () { return 0; }
0350     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (max)         () { return ULONG_MAX; }
0351     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long lowest        () { return 0; }
0352     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long epsilon       () { return 0; }
0353     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long round_error   () { return 0; }
0354     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long infinity      () { return 0; }
0355     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long quiet_NaN     () { return 0; }
0356     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long signaling_NaN () { return 0; }
0357     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long denorm_min    () { return 0; }
0358 };
0359 
0360 template <>
0361 struct numeric_limits<long long>
0362 {
0363     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<long long>::is_specialized;
0364     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<long long>::is_signed;
0365     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<long long>::is_integer;
0366     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<long long>::is_exact;
0367     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<long long>::has_infinity;
0368     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<long long>::has_quiet_NaN;
0369     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<long long>::has_signaling_NaN;
0370 
0371     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<long long>::round_style;
0372     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<long long>::is_iec559;
0373     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<long long>::is_bounded;
0374     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<long long>::is_modulo;
0375     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<long long>::digits;
0376     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<long long>::digits10;
0377     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<long long>::max_digits10;
0378     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<long long>::radix;
0379     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<long long>::min_exponent;
0380     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<long long>::min_exponent10;
0381     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<long long>::max_exponent;
0382     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<long long>::max_exponent10;
0383     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<long long>::traps;
0384     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<long long>::tinyness_before;
0385 
0386     // Member Functions
0387     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (min)         () { return LLONG_MIN; }
0388     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (max)         () { return LLONG_MAX; }
0389     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long lowest        () { return LLONG_MIN; }
0390     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long epsilon       () { return 0; }
0391     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long round_error   () { return 0; }
0392     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long infinity      () { return 0; }
0393     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long quiet_NaN     () { return 0; }
0394     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long signaling_NaN () { return 0; }
0395     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long denorm_min    () { return 0; }
0396 };
0397 
0398 template <>
0399 struct numeric_limits<unsigned long long>
0400 {
0401     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned long long>::is_specialized;
0402     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned long long>::is_signed;
0403     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned long long>::is_integer;
0404     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned long long>::is_exact;
0405     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned long long>::has_infinity;
0406     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned long long>::has_quiet_NaN;
0407     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned long long>::has_signaling_NaN;
0408 
0409     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned long long>::round_style;
0410     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned long long>::is_iec559;
0411     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned long long>::is_bounded;
0412     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned long long>::is_modulo;
0413     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned long long>::digits;
0414     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned long long>::digits10;
0415     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned long long>::max_digits10;
0416     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned long long>::radix;
0417     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned long long>::min_exponent;
0418     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned long long>::min_exponent10;
0419     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned long long>::max_exponent;
0420     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned long long>::max_exponent10;
0421     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned long long>::traps;
0422     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned long long>::tinyness_before;
0423 
0424     // Member Functions
0425     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (min)         () { return 0; }
0426     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (max)         () { return ULLONG_MAX; }
0427     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long lowest        () { return 0; }
0428     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long epsilon       () { return 0; }
0429     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long round_error   () { return 0; }
0430     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long infinity      () { return 0; }
0431     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long quiet_NaN     () { return 0; }
0432     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long signaling_NaN () { return 0; }
0433     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long denorm_min    () { return 0; }
0434 };
0435 
0436 template <>
0437 struct numeric_limits<bool>
0438 {
0439     BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<bool>::is_specialized;
0440     BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<bool>::is_signed;
0441     BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<bool>::is_integer;
0442     BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<bool>::is_exact;
0443     BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<bool>::has_infinity;
0444     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<bool>::has_quiet_NaN;
0445     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<bool>::has_signaling_NaN;
0446 
0447     BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<bool>::round_style;
0448     BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<bool>::is_iec559;
0449     BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<bool>::is_bounded;
0450     BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<bool>::is_modulo;
0451     BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<bool>::digits;
0452     BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<bool>::digits10;
0453     BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<bool>::max_digits10;
0454     BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<bool>::radix;
0455     BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<bool>::min_exponent;
0456     BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<bool>::min_exponent10;
0457     BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<bool>::max_exponent;
0458     BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<bool>::max_exponent10;
0459     BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<bool>::traps;
0460     BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<bool>::tinyness_before;
0461 
0462     // Member Functions
0463     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (min)         () { return false; }
0464     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (max)         () { return true; }
0465     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool lowest        () { return false; }
0466     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool epsilon       () { return false; }
0467     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool round_error   () { return false; }
0468     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool infinity      () { return false; }
0469     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool quiet_NaN     () { return false; }
0470     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool signaling_NaN () { return false; }
0471     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool denorm_min    () { return false; }
0472 };
0473 
0474 #elif defined(BOOST_MATH_HAS_NVRTC) // Pure NVRTC support - Removes rounding style and approximates the traits
0475 
0476 template <>
0477 struct numeric_limits<float>
0478 {
0479     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0480     BOOST_MATH_STATIC constexpr bool is_signed = true;
0481     BOOST_MATH_STATIC constexpr bool is_integer = false;
0482     BOOST_MATH_STATIC constexpr bool is_exact = false;
0483     BOOST_MATH_STATIC constexpr bool has_infinity = true;
0484     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = true;
0485     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = true;
0486 
0487     BOOST_MATH_STATIC constexpr bool is_iec559 = true;
0488     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0489     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0490     BOOST_MATH_STATIC constexpr int digits = 24;
0491     BOOST_MATH_STATIC constexpr int digits10 = 6;
0492     BOOST_MATH_STATIC constexpr int max_digits10 = 9;
0493     BOOST_MATH_STATIC constexpr int radix = 2;
0494     BOOST_MATH_STATIC constexpr int min_exponent = -125;
0495     BOOST_MATH_STATIC constexpr int min_exponent10 = -37;
0496     BOOST_MATH_STATIC constexpr int max_exponent = 128;
0497     BOOST_MATH_STATIC constexpr int max_exponent10 = 38;
0498     BOOST_MATH_STATIC constexpr bool traps = false;
0499     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0500 
0501     // Member Functions
0502     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (min)         () { return 1.17549435e-38F; }
0503     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (max)         () { return 3.40282347e+38F; }
0504     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float lowest        () { return -3.40282347e+38F; }
0505     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float epsilon       () { return 1.1920929e-07; }
0506     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float round_error   () { return 0.5F; }
0507     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float infinity      () { return __int_as_float(0x7f800000); }
0508     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float quiet_NaN     () { return __int_as_float(0x7fc00000); }
0509     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float signaling_NaN () { return __int_as_float(0x7fa00000); }
0510     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float denorm_min    () { return 1.4013e-45F; }
0511 };
0512 
0513 template <>
0514 struct numeric_limits<double>
0515 {
0516     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0517     BOOST_MATH_STATIC constexpr bool is_signed = true;
0518     BOOST_MATH_STATIC constexpr bool is_integer = false;
0519     BOOST_MATH_STATIC constexpr bool is_exact = false;
0520     BOOST_MATH_STATIC constexpr bool has_infinity = true;
0521     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = true;
0522     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = true;
0523 
0524     BOOST_MATH_STATIC constexpr bool is_iec559 = true;
0525     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0526     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0527     BOOST_MATH_STATIC constexpr int digits = 53;
0528     BOOST_MATH_STATIC constexpr int digits10 = 15;
0529     BOOST_MATH_STATIC constexpr int max_digits10 = 21;
0530     BOOST_MATH_STATIC constexpr int radix = 2;
0531     BOOST_MATH_STATIC constexpr int min_exponent = -1021;
0532     BOOST_MATH_STATIC constexpr int min_exponent10 = -307;
0533     BOOST_MATH_STATIC constexpr int max_exponent = 1024;
0534     BOOST_MATH_STATIC constexpr int max_exponent10 = 308;
0535     BOOST_MATH_STATIC constexpr bool traps = false;
0536     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0537 
0538     // Member Functions
0539     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (min)         () { return 2.2250738585072014e-308; }
0540     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (max)         () { return 1.7976931348623157e+308; }
0541     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double lowest        () { return -1.7976931348623157e+308; }
0542     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double epsilon       () { return 2.2204460492503131e-16; }
0543     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double round_error   () { return 0.5; }
0544     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double infinity      () { return __longlong_as_double(0x7ff0000000000000ULL); }
0545     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double quiet_NaN     () { return __longlong_as_double(0x7ff8000000000000ULL); }
0546     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double signaling_NaN () { return __longlong_as_double(0x7ff4000000000000ULL); }
0547     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double denorm_min    () { return 4.9406564584124654e-324; }
0548 };
0549 
0550 template <>
0551 struct numeric_limits<short>
0552 {
0553     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0554     BOOST_MATH_STATIC constexpr bool is_signed = true;
0555     BOOST_MATH_STATIC constexpr bool is_integer = true;
0556     BOOST_MATH_STATIC constexpr bool is_exact = true;
0557     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0558     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0559     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0560 
0561     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0562     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0563     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0564     BOOST_MATH_STATIC constexpr int digits = 15;
0565     BOOST_MATH_STATIC constexpr int digits10 = 4;
0566     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0567     BOOST_MATH_STATIC constexpr int radix = 2;
0568     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0569     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0570     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0571     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0572     BOOST_MATH_STATIC constexpr bool traps = true;
0573     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0574 
0575     // Member Functions
0576     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (min)         () { return -32768; }
0577     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (max)         () { return 32767; }
0578     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short lowest        () { return -32768; }
0579     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short epsilon       () { return 0; }
0580     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short round_error   () { return 0; }
0581     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short infinity      () { return 0; }
0582     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short quiet_NaN     () { return 0; }
0583     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short signaling_NaN () { return 0; }
0584     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short denorm_min    () { return 0; }
0585 };
0586 
0587 template <>
0588 struct numeric_limits<unsigned short>
0589 {
0590     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0591     BOOST_MATH_STATIC constexpr bool is_signed = false;
0592     BOOST_MATH_STATIC constexpr bool is_integer = true;
0593     BOOST_MATH_STATIC constexpr bool is_exact = true;
0594     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0595     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0596     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0597 
0598     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0599     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0600     BOOST_MATH_STATIC constexpr bool is_modulo = true;
0601     BOOST_MATH_STATIC constexpr int digits = 16;
0602     BOOST_MATH_STATIC constexpr int digits10 = 4;
0603     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0604     BOOST_MATH_STATIC constexpr int radix = 2;
0605     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0606     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0607     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0608     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0609     BOOST_MATH_STATIC constexpr bool traps = true;
0610     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0611 
0612     // Member Functions
0613     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (min)         () { return 0; }
0614     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (max)         () { return 65535U; }
0615     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short lowest        () { return 0; }
0616     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short epsilon       () { return 0; }
0617     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short round_error   () { return 0; }
0618     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short infinity      () { return 0; }
0619     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short quiet_NaN     () { return 0; }
0620     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short signaling_NaN () { return 0; }
0621     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short denorm_min    () { return 0; }
0622 };
0623 
0624 template <>
0625 struct numeric_limits<int>
0626 {
0627     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0628     BOOST_MATH_STATIC constexpr bool is_signed = true;
0629     BOOST_MATH_STATIC constexpr bool is_integer = true;
0630     BOOST_MATH_STATIC constexpr bool is_exact = true;
0631     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0632     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0633     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0634 
0635     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0636     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0637     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0638     BOOST_MATH_STATIC constexpr int digits = 31;
0639     BOOST_MATH_STATIC constexpr int digits10 = 9;
0640     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0641     BOOST_MATH_STATIC constexpr int radix = 2;
0642     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0643     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0644     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0645     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0646     BOOST_MATH_STATIC constexpr bool traps = true;
0647     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0648 
0649     // Member Functions
0650     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (min)         () { return -2147483648; }
0651     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (max)         () { return 2147483647; }
0652     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int lowest        () { return -2147483648; }
0653     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int epsilon       () { return 0; }
0654     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int round_error   () { return 0; }
0655     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int infinity      () { return 0; }
0656     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int quiet_NaN     () { return 0; }
0657     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int signaling_NaN () { return 0; }
0658     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int denorm_min    () { return 0; }
0659 };
0660 
0661 template <>
0662 struct numeric_limits<unsigned int>
0663 {
0664     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0665     BOOST_MATH_STATIC constexpr bool is_signed = false;
0666     BOOST_MATH_STATIC constexpr bool is_integer = true;
0667     BOOST_MATH_STATIC constexpr bool is_exact = true;
0668     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0669     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0670     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0671 
0672     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0673     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0674     BOOST_MATH_STATIC constexpr bool is_modulo = true;
0675     BOOST_MATH_STATIC constexpr int digits = 32;
0676     BOOST_MATH_STATIC constexpr int digits10 = 9;
0677     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0678     BOOST_MATH_STATIC constexpr int radix = 2;
0679     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0680     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0681     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0682     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0683     BOOST_MATH_STATIC constexpr bool traps = true;
0684     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0685 
0686     // Member Functions
0687     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (min)         () { return 0; }
0688     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (max)         () { return 4294967295U; }
0689     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int lowest        () { return 0; }
0690     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int epsilon       () { return 0; }
0691     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int round_error   () { return 0; }
0692     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int infinity      () { return 0; }
0693     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int quiet_NaN     () { return 0; }
0694     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int signaling_NaN () { return 0; }
0695     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int denorm_min    () { return 0; }
0696 };
0697 
0698 template <>
0699 struct numeric_limits<long>
0700 {
0701     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0702     BOOST_MATH_STATIC constexpr bool is_signed = true;
0703     BOOST_MATH_STATIC constexpr bool is_integer = true;
0704     BOOST_MATH_STATIC constexpr bool is_exact = true;
0705     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0706     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0707     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0708 
0709     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0710     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0711     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0712     BOOST_MATH_STATIC constexpr int digits = 63;
0713     BOOST_MATH_STATIC constexpr int digits10 = 18;
0714     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0715     BOOST_MATH_STATIC constexpr int radix = 2;
0716     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0717     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0718     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0719     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0720     BOOST_MATH_STATIC constexpr bool traps = true;
0721     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0722 
0723     // Member Functions
0724     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (min)         () { return -9223372036854775808L; }
0725     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (max)         () { return 9223372036854775807L; }
0726     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long lowest        () { return -9223372036854775808L; }
0727     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long epsilon       () { return 0; }
0728     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long round_error   () { return 0; }
0729     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long infinity      () { return 0; }
0730     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long quiet_NaN     () { return 0; }
0731     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long signaling_NaN () { return 0; }
0732     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long denorm_min    () { return 0; }
0733 };
0734 
0735 template <>
0736 struct numeric_limits<unsigned long>
0737 {
0738     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0739     BOOST_MATH_STATIC constexpr bool is_signed = false;
0740     BOOST_MATH_STATIC constexpr bool is_integer = true;
0741     BOOST_MATH_STATIC constexpr bool is_exact = true;
0742     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0743     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0744     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0745 
0746     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0747     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0748     BOOST_MATH_STATIC constexpr bool is_modulo = true;
0749     BOOST_MATH_STATIC constexpr int digits = 64;
0750     BOOST_MATH_STATIC constexpr int digits10 = 19;
0751     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0752     BOOST_MATH_STATIC constexpr int radix = 2;
0753     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0754     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0755     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0756     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0757     BOOST_MATH_STATIC constexpr bool traps = true;
0758     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0759 
0760     // Member Functions
0761     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (min)         () { return 0; }
0762     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (max)         () { return 18446744073709551615UL; }
0763     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long lowest        () { return 0; }
0764     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long epsilon       () { return 0; }
0765     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long round_error   () { return 0; }
0766     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long infinity      () { return 0; }
0767     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long quiet_NaN     () { return 0; }
0768     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long signaling_NaN () { return 0; }
0769     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long denorm_min    () { return 0; }
0770 };
0771 
0772 template <>
0773 struct numeric_limits<long long>
0774 {
0775     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0776     BOOST_MATH_STATIC constexpr bool is_signed = true;
0777     BOOST_MATH_STATIC constexpr bool is_integer = true;
0778     BOOST_MATH_STATIC constexpr bool is_exact = true;
0779     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0780     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0781     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0782 
0783     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0784     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0785     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0786     BOOST_MATH_STATIC constexpr int digits = 63;
0787     BOOST_MATH_STATIC constexpr int digits10 = 18;
0788     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0789     BOOST_MATH_STATIC constexpr int radix = 2;
0790     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0791     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0792     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0793     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0794     BOOST_MATH_STATIC constexpr bool traps = true;
0795     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0796 
0797     // Member Functions
0798     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (min)         () { return -9223372036854775808LL; }
0799     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (max)         () { return 9223372036854775807LL; }
0800     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long lowest        () { return -9223372036854775808LL; }
0801     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long epsilon       () { return 0; }
0802     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long round_error   () { return 0; }
0803     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long infinity      () { return 0; }
0804     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long quiet_NaN     () { return 0; }
0805     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long signaling_NaN () { return 0; }
0806     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long denorm_min    () { return 0; }
0807 };
0808 
0809 template <>
0810 struct numeric_limits<unsigned long long>
0811 {
0812     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0813     BOOST_MATH_STATIC constexpr bool is_signed = false;
0814     BOOST_MATH_STATIC constexpr bool is_integer = true;
0815     BOOST_MATH_STATIC constexpr bool is_exact = true;
0816     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0817     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0818     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0819 
0820     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0821     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0822     BOOST_MATH_STATIC constexpr bool is_modulo = true;
0823     BOOST_MATH_STATIC constexpr int digits = 64;
0824     BOOST_MATH_STATIC constexpr int digits10 = 19;
0825     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0826     BOOST_MATH_STATIC constexpr int radix = 2;
0827     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0828     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0829     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0830     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0831     BOOST_MATH_STATIC constexpr bool traps = true;
0832     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0833 
0834     // Member Functions
0835     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (min)         () { return 0; }
0836     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (max)         () { return 18446744073709551615UL; }
0837     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long lowest        () { return 0; }
0838     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long epsilon       () { return 0; }
0839     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long round_error   () { return 0; }
0840     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long infinity      () { return 0; }
0841     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long quiet_NaN     () { return 0; }
0842     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long signaling_NaN () { return 0; }
0843     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long denorm_min    () { return 0; }
0844 };
0845 
0846 template <>
0847 struct numeric_limits<bool>
0848 {
0849     BOOST_MATH_STATIC constexpr bool is_specialized = true;
0850     BOOST_MATH_STATIC constexpr bool is_signed = false;
0851     BOOST_MATH_STATIC constexpr bool is_integer = true;
0852     BOOST_MATH_STATIC constexpr bool is_exact = true;
0853     BOOST_MATH_STATIC constexpr bool has_infinity = false;
0854     BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
0855     BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
0856 
0857     BOOST_MATH_STATIC constexpr bool is_iec559 = false;
0858     BOOST_MATH_STATIC constexpr bool is_bounded = true;
0859     BOOST_MATH_STATIC constexpr bool is_modulo = false;
0860     BOOST_MATH_STATIC constexpr int digits = 1;
0861     BOOST_MATH_STATIC constexpr int digits10 = 0;
0862     BOOST_MATH_STATIC constexpr int max_digits10 = 0;
0863     BOOST_MATH_STATIC constexpr int radix = 2;
0864     BOOST_MATH_STATIC constexpr int min_exponent = 0;
0865     BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
0866     BOOST_MATH_STATIC constexpr int max_exponent = 0;
0867     BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
0868     BOOST_MATH_STATIC constexpr bool traps = false;
0869     BOOST_MATH_STATIC constexpr bool tinyness_before = false;
0870 
0871     // Member Functions
0872     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (min)         () { return false; }
0873     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (max)         () { return true; }
0874     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool lowest        () { return false; }
0875     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool epsilon       () { return false; }
0876     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool round_error   () { return false; }
0877     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool infinity      () { return false; }
0878     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool quiet_NaN     () { return false; }
0879     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool signaling_NaN () { return false; }
0880     BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool denorm_min    () { return false; }
0881 };
0882 
0883 #endif // BOOST_MATH_HAS_GPU_SUPPORT
0884 
0885 } // namespace math
0886 } // namespace boost
0887 
0888 #endif