numeric_limits.hpp 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. // Copyright (c) 2024 Matt Borland
  2. // Use, modification and distribution are subject to the
  3. // Boost Software License, Version 1.0. (See accompanying file
  4. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. //
  6. // Regular use of std::numeric_limits functions can not be used on
  7. // GPU platforms like CUDA since they are missing the __device__ marker
  8. // and libcu++ does not provide something analogous.
  9. // Rather than using giant if else blocks make our own version of numeric limits
  10. //
  11. // On the CUDA NVRTC platform we use a best attempt at emulating the functions
  12. // and values since we do not have any macros to go off of.
  13. // Use the values as found on GCC 11.4 RHEL 9.4 x64
  14. #ifndef BOOST_MATH_TOOLS_NUMERIC_LIMITS_HPP
  15. #define BOOST_MATH_TOOLS_NUMERIC_LIMITS_HPP
  16. #include <boost/math/tools/config.hpp>
  17. #ifndef BOOST_MATH_HAS_NVRTC
  18. #include <type_traits>
  19. #include <limits>
  20. #include <climits>
  21. #include <cfloat>
  22. #endif
  23. namespace boost {
  24. namespace math {
  25. template <typename T>
  26. struct numeric_limits
  27. #ifndef BOOST_MATH_HAS_NVRTC
  28. : public std::numeric_limits<T> {};
  29. #else
  30. {};
  31. #endif
  32. #if defined(BOOST_MATH_HAS_GPU_SUPPORT) && !defined(BOOST_MATH_HAS_NVRTC)
  33. template <>
  34. struct numeric_limits<float>
  35. {
  36. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<float>::is_specialized;
  37. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<float>::is_signed;
  38. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<float>::is_integer;
  39. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<float>::is_exact;
  40. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<float>::has_infinity;
  41. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<float>::has_quiet_NaN;
  42. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<float>::has_signaling_NaN;
  43. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<float>::round_style;
  44. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<float>::is_iec559;
  45. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<float>::is_bounded;
  46. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<float>::is_modulo;
  47. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<float>::digits;
  48. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<float>::digits10;
  49. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<float>::max_digits10;
  50. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<float>::radix;
  51. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<float>::min_exponent;
  52. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<float>::min_exponent10;
  53. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<float>::max_exponent;
  54. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<float>::max_exponent10;
  55. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<float>::traps;
  56. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<float>::tinyness_before;
  57. // Member Functions
  58. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (min) () { return FLT_MIN; }
  59. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (max) () { return FLT_MAX; }
  60. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float lowest () { return -FLT_MAX; }
  61. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float epsilon () { return FLT_EPSILON; }
  62. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float round_error () { return 0.5F; }
  63. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float infinity () { return static_cast<float>(INFINITY); }
  64. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float quiet_NaN () { return static_cast<float>(NAN); }
  65. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float signaling_NaN ()
  66. {
  67. #ifdef FLT_SNAN
  68. return FLT_SNAN;
  69. #else
  70. return static_cast<float>(NAN);
  71. #endif
  72. }
  73. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float denorm_min () { return FLT_TRUE_MIN; }
  74. };
  75. template <>
  76. struct numeric_limits<double>
  77. {
  78. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<double>::is_specialized;
  79. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<double>::is_signed;
  80. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<double>::is_integer;
  81. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<double>::is_exact;
  82. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<double>::has_infinity;
  83. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<double>::has_quiet_NaN;
  84. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<double>::has_signaling_NaN;
  85. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<double>::round_style;
  86. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<double>::is_iec559;
  87. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<double>::is_bounded;
  88. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<double>::is_modulo;
  89. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<double>::digits;
  90. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<double>::digits10;
  91. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<double>::max_digits10;
  92. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<double>::radix;
  93. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<double>::min_exponent;
  94. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<double>::min_exponent10;
  95. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<double>::max_exponent;
  96. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<double>::max_exponent10;
  97. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<double>::traps;
  98. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<double>::tinyness_before;
  99. // Member Functions
  100. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (min) () { return DBL_MIN; }
  101. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (max) () { return DBL_MAX; }
  102. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double lowest () { return -DBL_MAX; }
  103. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double epsilon () { return DBL_EPSILON; }
  104. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double round_error () { return 0.5; }
  105. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double infinity () { return static_cast<double>(INFINITY); }
  106. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double quiet_NaN () { return static_cast<double>(NAN); }
  107. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double signaling_NaN ()
  108. {
  109. #ifdef DBL_SNAN
  110. return DBL_SNAN;
  111. #else
  112. return static_cast<double>(NAN);
  113. #endif
  114. }
  115. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double denorm_min () { return DBL_TRUE_MIN; }
  116. };
  117. template <>
  118. struct numeric_limits<short>
  119. {
  120. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<short>::is_specialized;
  121. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<short>::is_signed;
  122. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<short>::is_integer;
  123. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<short>::is_exact;
  124. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<short>::has_infinity;
  125. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<short>::has_quiet_NaN;
  126. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<short>::has_signaling_NaN;
  127. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<short>::round_style;
  128. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<short>::is_iec559;
  129. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<short>::is_bounded;
  130. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<short>::is_modulo;
  131. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<short>::digits;
  132. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<short>::digits10;
  133. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<short>::max_digits10;
  134. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<short>::radix;
  135. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<short>::min_exponent;
  136. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<short>::min_exponent10;
  137. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<short>::max_exponent;
  138. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<short>::max_exponent10;
  139. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<short>::traps;
  140. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<short>::tinyness_before;
  141. // Member Functions
  142. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (min) () { return SHRT_MIN; }
  143. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (max) () { return SHRT_MAX; }
  144. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short lowest () { return SHRT_MIN; }
  145. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short epsilon () { return 0; }
  146. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short round_error () { return 0; }
  147. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short infinity () { return 0; }
  148. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short quiet_NaN () { return 0; }
  149. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short signaling_NaN () { return 0; }
  150. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short denorm_min () { return 0; }
  151. };
  152. template <>
  153. struct numeric_limits<unsigned short>
  154. {
  155. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned short>::is_specialized;
  156. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned short>::is_signed;
  157. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned short>::is_integer;
  158. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned short>::is_exact;
  159. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned short>::has_infinity;
  160. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned short>::has_quiet_NaN;
  161. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned short>::has_signaling_NaN;
  162. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned short>::round_style;
  163. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned short>::is_iec559;
  164. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned short>::is_bounded;
  165. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned short>::is_modulo;
  166. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned short>::digits;
  167. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned short>::digits10;
  168. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned short>::max_digits10;
  169. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned short>::radix;
  170. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned short>::min_exponent;
  171. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned short>::min_exponent10;
  172. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned short>::max_exponent;
  173. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned short>::max_exponent10;
  174. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned short>::traps;
  175. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned short>::tinyness_before;
  176. // Member Functions
  177. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (min) () { return 0; }
  178. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (max) () { return USHRT_MAX; }
  179. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short lowest () { return 0; }
  180. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short epsilon () { return 0; }
  181. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short round_error () { return 0; }
  182. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short infinity () { return 0; }
  183. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short quiet_NaN () { return 0; }
  184. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short signaling_NaN () { return 0; }
  185. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short denorm_min () { return 0; }
  186. };
  187. template <>
  188. struct numeric_limits<int>
  189. {
  190. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<int>::is_specialized;
  191. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<int>::is_signed;
  192. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<int>::is_integer;
  193. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<int>::is_exact;
  194. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<int>::has_infinity;
  195. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<int>::has_quiet_NaN;
  196. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<int>::has_signaling_NaN;
  197. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<int>::round_style;
  198. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<int>::is_iec559;
  199. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<int>::is_bounded;
  200. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<int>::is_modulo;
  201. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<int>::digits;
  202. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<int>::digits10;
  203. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<int>::max_digits10;
  204. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<int>::radix;
  205. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<int>::min_exponent;
  206. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<int>::min_exponent10;
  207. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<int>::max_exponent;
  208. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<int>::max_exponent10;
  209. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<int>::traps;
  210. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<int>::tinyness_before;
  211. // Member Functions
  212. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (min) () { return INT_MIN; }
  213. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (max) () { return INT_MAX; }
  214. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int lowest () { return INT_MIN; }
  215. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int epsilon () { return 0; }
  216. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int round_error () { return 0; }
  217. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int infinity () { return 0; }
  218. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int quiet_NaN () { return 0; }
  219. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int signaling_NaN () { return 0; }
  220. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int denorm_min () { return 0; }
  221. };
  222. template <>
  223. struct numeric_limits<unsigned int>
  224. {
  225. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned int>::is_specialized;
  226. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned int>::is_signed;
  227. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned int>::is_integer;
  228. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned int>::is_exact;
  229. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned int>::has_infinity;
  230. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned int>::has_quiet_NaN;
  231. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned int>::has_signaling_NaN;
  232. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned int>::round_style;
  233. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned int>::is_iec559;
  234. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned int>::is_bounded;
  235. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned int>::is_modulo;
  236. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned int>::digits;
  237. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned int>::digits10;
  238. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned int>::max_digits10;
  239. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned int>::radix;
  240. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned int>::min_exponent;
  241. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned int>::min_exponent10;
  242. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned int>::max_exponent;
  243. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned int>::max_exponent10;
  244. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned int>::traps;
  245. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned int>::tinyness_before;
  246. // Member Functions
  247. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (min) () { return 0; }
  248. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (max) () { return UINT_MAX; }
  249. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int lowest () { return 0; }
  250. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int epsilon () { return 0; }
  251. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int round_error () { return 0; }
  252. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int infinity () { return 0; }
  253. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int quiet_NaN () { return 0; }
  254. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int signaling_NaN () { return 0; }
  255. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int denorm_min () { return 0; }
  256. };
  257. template <>
  258. struct numeric_limits<long>
  259. {
  260. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<long>::is_specialized;
  261. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<long>::is_signed;
  262. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<long>::is_integer;
  263. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<long>::is_exact;
  264. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<long>::has_infinity;
  265. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<long>::has_quiet_NaN;
  266. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<long>::has_signaling_NaN;
  267. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<long>::round_style;
  268. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<long>::is_iec559;
  269. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<long>::is_bounded;
  270. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<long>::is_modulo;
  271. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<long>::digits;
  272. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<long>::digits10;
  273. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<long>::max_digits10;
  274. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<long>::radix;
  275. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<long>::min_exponent;
  276. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<long>::min_exponent10;
  277. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<long>::max_exponent;
  278. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<long>::max_exponent10;
  279. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<long>::traps;
  280. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<long>::tinyness_before;
  281. // Member Functions
  282. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (min) () { return LONG_MIN; }
  283. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (max) () { return LONG_MAX; }
  284. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long lowest () { return LONG_MIN; }
  285. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long epsilon () { return 0; }
  286. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long round_error () { return 0; }
  287. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long infinity () { return 0; }
  288. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long quiet_NaN () { return 0; }
  289. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long signaling_NaN () { return 0; }
  290. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long denorm_min () { return 0; }
  291. };
  292. template <>
  293. struct numeric_limits<unsigned long>
  294. {
  295. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned long>::is_specialized;
  296. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned long>::is_signed;
  297. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned long>::is_integer;
  298. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned long>::is_exact;
  299. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned long>::has_infinity;
  300. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned long>::has_quiet_NaN;
  301. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned long>::has_signaling_NaN;
  302. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned long>::round_style;
  303. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned long>::is_iec559;
  304. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned long>::is_bounded;
  305. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned long>::is_modulo;
  306. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned long>::digits;
  307. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned long>::digits10;
  308. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned long>::max_digits10;
  309. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned long>::radix;
  310. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned long>::min_exponent;
  311. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned long>::min_exponent10;
  312. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned long>::max_exponent;
  313. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned long>::max_exponent10;
  314. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned long>::traps;
  315. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned long>::tinyness_before;
  316. // Member Functions
  317. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (min) () { return 0; }
  318. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (max) () { return ULONG_MAX; }
  319. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long lowest () { return 0; }
  320. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long epsilon () { return 0; }
  321. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long round_error () { return 0; }
  322. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long infinity () { return 0; }
  323. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long quiet_NaN () { return 0; }
  324. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long signaling_NaN () { return 0; }
  325. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long denorm_min () { return 0; }
  326. };
  327. template <>
  328. struct numeric_limits<long long>
  329. {
  330. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<long long>::is_specialized;
  331. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<long long>::is_signed;
  332. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<long long>::is_integer;
  333. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<long long>::is_exact;
  334. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<long long>::has_infinity;
  335. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<long long>::has_quiet_NaN;
  336. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<long long>::has_signaling_NaN;
  337. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<long long>::round_style;
  338. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<long long>::is_iec559;
  339. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<long long>::is_bounded;
  340. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<long long>::is_modulo;
  341. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<long long>::digits;
  342. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<long long>::digits10;
  343. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<long long>::max_digits10;
  344. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<long long>::radix;
  345. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<long long>::min_exponent;
  346. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<long long>::min_exponent10;
  347. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<long long>::max_exponent;
  348. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<long long>::max_exponent10;
  349. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<long long>::traps;
  350. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<long long>::tinyness_before;
  351. // Member Functions
  352. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (min) () { return LLONG_MIN; }
  353. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (max) () { return LLONG_MAX; }
  354. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long lowest () { return LLONG_MIN; }
  355. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long epsilon () { return 0; }
  356. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long round_error () { return 0; }
  357. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long infinity () { return 0; }
  358. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long quiet_NaN () { return 0; }
  359. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long signaling_NaN () { return 0; }
  360. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long denorm_min () { return 0; }
  361. };
  362. template <>
  363. struct numeric_limits<unsigned long long>
  364. {
  365. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<unsigned long long>::is_specialized;
  366. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<unsigned long long>::is_signed;
  367. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<unsigned long long>::is_integer;
  368. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<unsigned long long>::is_exact;
  369. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<unsigned long long>::has_infinity;
  370. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<unsigned long long>::has_quiet_NaN;
  371. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<unsigned long long>::has_signaling_NaN;
  372. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<unsigned long long>::round_style;
  373. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<unsigned long long>::is_iec559;
  374. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<unsigned long long>::is_bounded;
  375. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<unsigned long long>::is_modulo;
  376. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<unsigned long long>::digits;
  377. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<unsigned long long>::digits10;
  378. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<unsigned long long>::max_digits10;
  379. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<unsigned long long>::radix;
  380. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<unsigned long long>::min_exponent;
  381. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<unsigned long long>::min_exponent10;
  382. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<unsigned long long>::max_exponent;
  383. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<unsigned long long>::max_exponent10;
  384. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<unsigned long long>::traps;
  385. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<unsigned long long>::tinyness_before;
  386. // Member Functions
  387. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (min) () { return 0; }
  388. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (max) () { return ULLONG_MAX; }
  389. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long lowest () { return 0; }
  390. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long epsilon () { return 0; }
  391. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long round_error () { return 0; }
  392. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long infinity () { return 0; }
  393. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long quiet_NaN () { return 0; }
  394. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long signaling_NaN () { return 0; }
  395. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long denorm_min () { return 0; }
  396. };
  397. template <>
  398. struct numeric_limits<bool>
  399. {
  400. BOOST_MATH_STATIC constexpr bool is_specialized = std::numeric_limits<bool>::is_specialized;
  401. BOOST_MATH_STATIC constexpr bool is_signed = std::numeric_limits<bool>::is_signed;
  402. BOOST_MATH_STATIC constexpr bool is_integer = std::numeric_limits<bool>::is_integer;
  403. BOOST_MATH_STATIC constexpr bool is_exact = std::numeric_limits<bool>::is_exact;
  404. BOOST_MATH_STATIC constexpr bool has_infinity = std::numeric_limits<bool>::has_infinity;
  405. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = std::numeric_limits<bool>::has_quiet_NaN;
  406. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = std::numeric_limits<bool>::has_signaling_NaN;
  407. BOOST_MATH_STATIC constexpr std::float_round_style round_style = std::numeric_limits<bool>::round_style;
  408. BOOST_MATH_STATIC constexpr bool is_iec559 = std::numeric_limits<bool>::is_iec559;
  409. BOOST_MATH_STATIC constexpr bool is_bounded = std::numeric_limits<bool>::is_bounded;
  410. BOOST_MATH_STATIC constexpr bool is_modulo = std::numeric_limits<bool>::is_modulo;
  411. BOOST_MATH_STATIC constexpr int digits = std::numeric_limits<bool>::digits;
  412. BOOST_MATH_STATIC constexpr int digits10 = std::numeric_limits<bool>::digits10;
  413. BOOST_MATH_STATIC constexpr int max_digits10 = std::numeric_limits<bool>::max_digits10;
  414. BOOST_MATH_STATIC constexpr int radix = std::numeric_limits<bool>::radix;
  415. BOOST_MATH_STATIC constexpr int min_exponent = std::numeric_limits<bool>::min_exponent;
  416. BOOST_MATH_STATIC constexpr int min_exponent10 = std::numeric_limits<bool>::min_exponent10;
  417. BOOST_MATH_STATIC constexpr int max_exponent = std::numeric_limits<bool>::max_exponent;
  418. BOOST_MATH_STATIC constexpr int max_exponent10 = std::numeric_limits<bool>::max_exponent10;
  419. BOOST_MATH_STATIC constexpr bool traps = std::numeric_limits<bool>::traps;
  420. BOOST_MATH_STATIC constexpr bool tinyness_before = std::numeric_limits<bool>::tinyness_before;
  421. // Member Functions
  422. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (min) () { return false; }
  423. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (max) () { return true; }
  424. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool lowest () { return false; }
  425. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool epsilon () { return false; }
  426. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool round_error () { return false; }
  427. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool infinity () { return false; }
  428. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool quiet_NaN () { return false; }
  429. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool signaling_NaN () { return false; }
  430. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool denorm_min () { return false; }
  431. };
  432. #elif defined(BOOST_MATH_HAS_NVRTC) // Pure NVRTC support - Removes rounding style and approximates the traits
  433. template <>
  434. struct numeric_limits<float>
  435. {
  436. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  437. BOOST_MATH_STATIC constexpr bool is_signed = true;
  438. BOOST_MATH_STATIC constexpr bool is_integer = false;
  439. BOOST_MATH_STATIC constexpr bool is_exact = false;
  440. BOOST_MATH_STATIC constexpr bool has_infinity = true;
  441. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = true;
  442. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = true;
  443. BOOST_MATH_STATIC constexpr bool is_iec559 = true;
  444. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  445. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  446. BOOST_MATH_STATIC constexpr int digits = 24;
  447. BOOST_MATH_STATIC constexpr int digits10 = 6;
  448. BOOST_MATH_STATIC constexpr int max_digits10 = 9;
  449. BOOST_MATH_STATIC constexpr int radix = 2;
  450. BOOST_MATH_STATIC constexpr int min_exponent = -125;
  451. BOOST_MATH_STATIC constexpr int min_exponent10 = -37;
  452. BOOST_MATH_STATIC constexpr int max_exponent = 128;
  453. BOOST_MATH_STATIC constexpr int max_exponent10 = 38;
  454. BOOST_MATH_STATIC constexpr bool traps = false;
  455. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  456. // Member Functions
  457. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (min) () { return 1.17549435e-38F; }
  458. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float (max) () { return 3.40282347e+38F; }
  459. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float lowest () { return -3.40282347e+38F; }
  460. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float epsilon () { return 1.1920929e-07; }
  461. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float round_error () { return 0.5F; }
  462. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float infinity () { return __int_as_float(0x7f800000); }
  463. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float quiet_NaN () { return __int_as_float(0x7fc00000); }
  464. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float signaling_NaN () { return __int_as_float(0x7fa00000); }
  465. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr float denorm_min () { return 1.4013e-45F; }
  466. };
  467. template <>
  468. struct numeric_limits<double>
  469. {
  470. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  471. BOOST_MATH_STATIC constexpr bool is_signed = true;
  472. BOOST_MATH_STATIC constexpr bool is_integer = false;
  473. BOOST_MATH_STATIC constexpr bool is_exact = false;
  474. BOOST_MATH_STATIC constexpr bool has_infinity = true;
  475. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = true;
  476. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = true;
  477. BOOST_MATH_STATIC constexpr bool is_iec559 = true;
  478. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  479. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  480. BOOST_MATH_STATIC constexpr int digits = 53;
  481. BOOST_MATH_STATIC constexpr int digits10 = 15;
  482. BOOST_MATH_STATIC constexpr int max_digits10 = 21;
  483. BOOST_MATH_STATIC constexpr int radix = 2;
  484. BOOST_MATH_STATIC constexpr int min_exponent = -1021;
  485. BOOST_MATH_STATIC constexpr int min_exponent10 = -307;
  486. BOOST_MATH_STATIC constexpr int max_exponent = 1024;
  487. BOOST_MATH_STATIC constexpr int max_exponent10 = 308;
  488. BOOST_MATH_STATIC constexpr bool traps = false;
  489. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  490. // Member Functions
  491. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (min) () { return 2.2250738585072014e-308; }
  492. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double (max) () { return 1.7976931348623157e+308; }
  493. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double lowest () { return -1.7976931348623157e+308; }
  494. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double epsilon () { return 2.2204460492503131e-16; }
  495. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double round_error () { return 0.5; }
  496. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double infinity () { return __longlong_as_double(0x7ff0000000000000ULL); }
  497. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double quiet_NaN () { return __longlong_as_double(0x7ff8000000000000ULL); }
  498. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double signaling_NaN () { return __longlong_as_double(0x7ff4000000000000ULL); }
  499. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr double denorm_min () { return 4.9406564584124654e-324; }
  500. };
  501. template <>
  502. struct numeric_limits<short>
  503. {
  504. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  505. BOOST_MATH_STATIC constexpr bool is_signed = true;
  506. BOOST_MATH_STATIC constexpr bool is_integer = true;
  507. BOOST_MATH_STATIC constexpr bool is_exact = true;
  508. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  509. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  510. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  511. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  512. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  513. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  514. BOOST_MATH_STATIC constexpr int digits = 15;
  515. BOOST_MATH_STATIC constexpr int digits10 = 4;
  516. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  517. BOOST_MATH_STATIC constexpr int radix = 2;
  518. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  519. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  520. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  521. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  522. BOOST_MATH_STATIC constexpr bool traps = true;
  523. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  524. // Member Functions
  525. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (min) () { return -32768; }
  526. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short (max) () { return 32767; }
  527. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short lowest () { return -32768; }
  528. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short epsilon () { return 0; }
  529. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short round_error () { return 0; }
  530. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short infinity () { return 0; }
  531. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short quiet_NaN () { return 0; }
  532. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short signaling_NaN () { return 0; }
  533. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr short denorm_min () { return 0; }
  534. };
  535. template <>
  536. struct numeric_limits<unsigned short>
  537. {
  538. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  539. BOOST_MATH_STATIC constexpr bool is_signed = false;
  540. BOOST_MATH_STATIC constexpr bool is_integer = true;
  541. BOOST_MATH_STATIC constexpr bool is_exact = true;
  542. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  543. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  544. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  545. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  546. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  547. BOOST_MATH_STATIC constexpr bool is_modulo = true;
  548. BOOST_MATH_STATIC constexpr int digits = 16;
  549. BOOST_MATH_STATIC constexpr int digits10 = 4;
  550. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  551. BOOST_MATH_STATIC constexpr int radix = 2;
  552. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  553. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  554. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  555. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  556. BOOST_MATH_STATIC constexpr bool traps = true;
  557. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  558. // Member Functions
  559. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (min) () { return 0; }
  560. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short (max) () { return 65535U; }
  561. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short lowest () { return 0; }
  562. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short epsilon () { return 0; }
  563. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short round_error () { return 0; }
  564. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short infinity () { return 0; }
  565. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short quiet_NaN () { return 0; }
  566. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short signaling_NaN () { return 0; }
  567. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned short denorm_min () { return 0; }
  568. };
  569. template <>
  570. struct numeric_limits<int>
  571. {
  572. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  573. BOOST_MATH_STATIC constexpr bool is_signed = true;
  574. BOOST_MATH_STATIC constexpr bool is_integer = true;
  575. BOOST_MATH_STATIC constexpr bool is_exact = true;
  576. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  577. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  578. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  579. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  580. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  581. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  582. BOOST_MATH_STATIC constexpr int digits = 31;
  583. BOOST_MATH_STATIC constexpr int digits10 = 9;
  584. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  585. BOOST_MATH_STATIC constexpr int radix = 2;
  586. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  587. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  588. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  589. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  590. BOOST_MATH_STATIC constexpr bool traps = true;
  591. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  592. // Member Functions
  593. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (min) () { return -2147483648; }
  594. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int (max) () { return 2147483647; }
  595. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int lowest () { return -2147483648; }
  596. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int epsilon () { return 0; }
  597. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int round_error () { return 0; }
  598. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int infinity () { return 0; }
  599. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int quiet_NaN () { return 0; }
  600. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int signaling_NaN () { return 0; }
  601. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr int denorm_min () { return 0; }
  602. };
  603. template <>
  604. struct numeric_limits<unsigned int>
  605. {
  606. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  607. BOOST_MATH_STATIC constexpr bool is_signed = false;
  608. BOOST_MATH_STATIC constexpr bool is_integer = true;
  609. BOOST_MATH_STATIC constexpr bool is_exact = true;
  610. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  611. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  612. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  613. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  614. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  615. BOOST_MATH_STATIC constexpr bool is_modulo = true;
  616. BOOST_MATH_STATIC constexpr int digits = 32;
  617. BOOST_MATH_STATIC constexpr int digits10 = 9;
  618. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  619. BOOST_MATH_STATIC constexpr int radix = 2;
  620. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  621. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  622. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  623. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  624. BOOST_MATH_STATIC constexpr bool traps = true;
  625. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  626. // Member Functions
  627. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (min) () { return 0; }
  628. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int (max) () { return 4294967295U; }
  629. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int lowest () { return 0; }
  630. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int epsilon () { return 0; }
  631. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int round_error () { return 0; }
  632. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int infinity () { return 0; }
  633. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int quiet_NaN () { return 0; }
  634. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int signaling_NaN () { return 0; }
  635. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned int denorm_min () { return 0; }
  636. };
  637. template <>
  638. struct numeric_limits<long>
  639. {
  640. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  641. BOOST_MATH_STATIC constexpr bool is_signed = true;
  642. BOOST_MATH_STATIC constexpr bool is_integer = true;
  643. BOOST_MATH_STATIC constexpr bool is_exact = true;
  644. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  645. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  646. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  647. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  648. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  649. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  650. BOOST_MATH_STATIC constexpr int digits = 63;
  651. BOOST_MATH_STATIC constexpr int digits10 = 18;
  652. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  653. BOOST_MATH_STATIC constexpr int radix = 2;
  654. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  655. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  656. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  657. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  658. BOOST_MATH_STATIC constexpr bool traps = true;
  659. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  660. // Member Functions
  661. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (min) () { return -9223372036854775808L; }
  662. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long (max) () { return 9223372036854775807L; }
  663. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long lowest () { return -9223372036854775808L; }
  664. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long epsilon () { return 0; }
  665. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long round_error () { return 0; }
  666. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long infinity () { return 0; }
  667. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long quiet_NaN () { return 0; }
  668. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long signaling_NaN () { return 0; }
  669. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long denorm_min () { return 0; }
  670. };
  671. template <>
  672. struct numeric_limits<unsigned long>
  673. {
  674. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  675. BOOST_MATH_STATIC constexpr bool is_signed = false;
  676. BOOST_MATH_STATIC constexpr bool is_integer = true;
  677. BOOST_MATH_STATIC constexpr bool is_exact = true;
  678. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  679. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  680. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  681. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  682. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  683. BOOST_MATH_STATIC constexpr bool is_modulo = true;
  684. BOOST_MATH_STATIC constexpr int digits = 64;
  685. BOOST_MATH_STATIC constexpr int digits10 = 19;
  686. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  687. BOOST_MATH_STATIC constexpr int radix = 2;
  688. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  689. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  690. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  691. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  692. BOOST_MATH_STATIC constexpr bool traps = true;
  693. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  694. // Member Functions
  695. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (min) () { return 0; }
  696. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long (max) () { return 18446744073709551615UL; }
  697. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long lowest () { return 0; }
  698. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long epsilon () { return 0; }
  699. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long round_error () { return 0; }
  700. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long infinity () { return 0; }
  701. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long quiet_NaN () { return 0; }
  702. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long signaling_NaN () { return 0; }
  703. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long denorm_min () { return 0; }
  704. };
  705. template <>
  706. struct numeric_limits<long long>
  707. {
  708. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  709. BOOST_MATH_STATIC constexpr bool is_signed = true;
  710. BOOST_MATH_STATIC constexpr bool is_integer = true;
  711. BOOST_MATH_STATIC constexpr bool is_exact = true;
  712. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  713. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  714. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  715. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  716. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  717. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  718. BOOST_MATH_STATIC constexpr int digits = 63;
  719. BOOST_MATH_STATIC constexpr int digits10 = 18;
  720. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  721. BOOST_MATH_STATIC constexpr int radix = 2;
  722. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  723. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  724. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  725. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  726. BOOST_MATH_STATIC constexpr bool traps = true;
  727. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  728. // Member Functions
  729. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (min) () { return -9223372036854775808LL; }
  730. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long (max) () { return 9223372036854775807LL; }
  731. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long lowest () { return -9223372036854775808LL; }
  732. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long epsilon () { return 0; }
  733. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long round_error () { return 0; }
  734. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long infinity () { return 0; }
  735. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long quiet_NaN () { return 0; }
  736. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long signaling_NaN () { return 0; }
  737. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr long long denorm_min () { return 0; }
  738. };
  739. template <>
  740. struct numeric_limits<unsigned long long>
  741. {
  742. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  743. BOOST_MATH_STATIC constexpr bool is_signed = false;
  744. BOOST_MATH_STATIC constexpr bool is_integer = true;
  745. BOOST_MATH_STATIC constexpr bool is_exact = true;
  746. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  747. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  748. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  749. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  750. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  751. BOOST_MATH_STATIC constexpr bool is_modulo = true;
  752. BOOST_MATH_STATIC constexpr int digits = 64;
  753. BOOST_MATH_STATIC constexpr int digits10 = 19;
  754. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  755. BOOST_MATH_STATIC constexpr int radix = 2;
  756. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  757. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  758. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  759. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  760. BOOST_MATH_STATIC constexpr bool traps = true;
  761. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  762. // Member Functions
  763. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (min) () { return 0; }
  764. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long (max) () { return 18446744073709551615UL; }
  765. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long lowest () { return 0; }
  766. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long epsilon () { return 0; }
  767. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long round_error () { return 0; }
  768. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long infinity () { return 0; }
  769. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long quiet_NaN () { return 0; }
  770. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long signaling_NaN () { return 0; }
  771. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr unsigned long long denorm_min () { return 0; }
  772. };
  773. template <>
  774. struct numeric_limits<bool>
  775. {
  776. BOOST_MATH_STATIC constexpr bool is_specialized = true;
  777. BOOST_MATH_STATIC constexpr bool is_signed = false;
  778. BOOST_MATH_STATIC constexpr bool is_integer = true;
  779. BOOST_MATH_STATIC constexpr bool is_exact = true;
  780. BOOST_MATH_STATIC constexpr bool has_infinity = false;
  781. BOOST_MATH_STATIC constexpr bool has_quiet_NaN = false;
  782. BOOST_MATH_STATIC constexpr bool has_signaling_NaN = false;
  783. BOOST_MATH_STATIC constexpr bool is_iec559 = false;
  784. BOOST_MATH_STATIC constexpr bool is_bounded = true;
  785. BOOST_MATH_STATIC constexpr bool is_modulo = false;
  786. BOOST_MATH_STATIC constexpr int digits = 1;
  787. BOOST_MATH_STATIC constexpr int digits10 = 0;
  788. BOOST_MATH_STATIC constexpr int max_digits10 = 0;
  789. BOOST_MATH_STATIC constexpr int radix = 2;
  790. BOOST_MATH_STATIC constexpr int min_exponent = 0;
  791. BOOST_MATH_STATIC constexpr int min_exponent10 = 0;
  792. BOOST_MATH_STATIC constexpr int max_exponent = 0;
  793. BOOST_MATH_STATIC constexpr int max_exponent10 = 0;
  794. BOOST_MATH_STATIC constexpr bool traps = false;
  795. BOOST_MATH_STATIC constexpr bool tinyness_before = false;
  796. // Member Functions
  797. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (min) () { return false; }
  798. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool (max) () { return true; }
  799. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool lowest () { return false; }
  800. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool epsilon () { return false; }
  801. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool round_error () { return false; }
  802. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool infinity () { return false; }
  803. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool quiet_NaN () { return false; }
  804. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool signaling_NaN () { return false; }
  805. BOOST_MATH_GPU_ENABLED BOOST_MATH_STATIC constexpr bool denorm_min () { return false; }
  806. };
  807. #endif // BOOST_MATH_HAS_GPU_SUPPORT
  808. } // namespace math
  809. } // namespace boost
  810. #endif