real_type_concept.hpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright John Maddock 2007-8.
  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. #ifndef BOOST_MATH_REAL_TYPE_CONCEPT_HPP
  6. #define BOOST_MATH_REAL_TYPE_CONCEPT_HPP
  7. #include <boost/config.hpp>
  8. #ifdef BOOST_MSVC
  9. #pragma warning(push)
  10. #pragma warning(disable: 4100)
  11. #pragma warning(disable: 4510)
  12. #pragma warning(disable: 4610)
  13. #endif
  14. #include <boost/concept_check.hpp>
  15. #ifdef BOOST_MSVC
  16. #pragma warning(pop)
  17. #endif
  18. #include <boost/math/tools/config.hpp>
  19. #include <boost/math/tools/precision.hpp>
  20. namespace boost{ namespace math{ namespace concepts{
  21. template <class RealType>
  22. struct RealTypeConcept
  23. {
  24. template <class Other>
  25. void check_binary_ops(Other o)
  26. {
  27. RealType r(o);
  28. r = o;
  29. r -= o;
  30. r += o;
  31. r *= o;
  32. r /= o;
  33. r = r - o;
  34. r = o - r;
  35. r = r + o;
  36. r = o + r;
  37. r = o * r;
  38. r = r * o;
  39. r = r / o;
  40. r = o / r;
  41. bool b;
  42. b = r == o;
  43. suppress_unused_variable_warning(b);
  44. b = o == r;
  45. suppress_unused_variable_warning(b);
  46. b = r != o;
  47. suppress_unused_variable_warning(b);
  48. b = o != r;
  49. suppress_unused_variable_warning(b);
  50. b = r <= o;
  51. suppress_unused_variable_warning(b);
  52. b = o <= r;
  53. suppress_unused_variable_warning(b);
  54. b = r >= o;
  55. suppress_unused_variable_warning(b);
  56. b = o >= r;
  57. suppress_unused_variable_warning(b);
  58. b = r < o;
  59. suppress_unused_variable_warning(b);
  60. b = o < r;
  61. suppress_unused_variable_warning(b);
  62. b = r > o;
  63. suppress_unused_variable_warning(b);
  64. b = o > r;
  65. suppress_unused_variable_warning(b);
  66. }
  67. void constraints()
  68. {
  69. BOOST_MATH_STD_USING
  70. RealType r;
  71. check_binary_ops(r);
  72. check_binary_ops(0.5f);
  73. check_binary_ops(0.5);
  74. //check_binary_ops(0.5L);
  75. check_binary_ops(1);
  76. //check_binary_ops(1u);
  77. check_binary_ops(1L);
  78. //check_binary_ops(1uL);
  79. #ifndef BOOST_HAS_LONG_LONG
  80. check_binary_ops(1LL);
  81. #endif
  82. RealType r2 = +r;
  83. r2 = -r;
  84. r2 = fabs(r);
  85. r2 = abs(r);
  86. r2 = ceil(r);
  87. r2 = floor(r);
  88. r2 = exp(r);
  89. r2 = pow(r, r2);
  90. r2 = sqrt(r);
  91. r2 = log(r);
  92. r2 = cos(r);
  93. r2 = sin(r);
  94. r2 = tan(r);
  95. r2 = asin(r);
  96. r2 = acos(r);
  97. r2 = atan(r);
  98. int i;
  99. r2 = ldexp(r, i);
  100. r2 = frexp(r, &i);
  101. i = boost::math::tools::digits<RealType>();
  102. r2 = boost::math::tools::max_value<RealType>();
  103. r2 = boost::math::tools::min_value<RealType>();
  104. r2 = boost::math::tools::log_max_value<RealType>();
  105. r2 = boost::math::tools::log_min_value<RealType>();
  106. r2 = boost::math::tools::epsilon<RealType>();
  107. }
  108. }; // struct DistributionConcept
  109. }}} // namespaces
  110. #endif