constexpr_test_float128.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // (C) Copyright John Maddock 2019.
  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. #include "constexpr_arithmetric_test.hpp"
  6. #include <boost/multiprecision/float128.hpp>
  7. #include <iostream>
  8. int main()
  9. {
  10. using boost::multiprecision::float128;
  11. {
  12. constexpr float128 a(22);
  13. constexpr float128 b = test_constexpr_add_subtract(a);
  14. constexpr __float128 f128 = (__float128)b;
  15. static_assert(f128 == -134.0f);
  16. constexpr int i = (int)b;
  17. static_assert(i == -134);
  18. constexpr short s = (short)b;
  19. static_assert(s == -134);
  20. }
  21. {
  22. constexpr float128 a(22);
  23. constexpr float128 b = test_constexpr_mul_divide(a);
  24. static_assert((__float128)b == 0);
  25. }
  26. {
  27. constexpr float128 a(22);
  28. constexpr float128 b = test_constexpr_compare(a);
  29. static_assert((__float128)b == 119);
  30. }
  31. {
  32. constexpr float128 a(0);
  33. static_assert(fpclassify(a) == FP_ZERO);
  34. constexpr float128 b(1);
  35. static_assert(fpclassify(b) == FP_NORMAL);
  36. constexpr float128 c(-1);
  37. static_assert(fpclassify(c) == FP_NORMAL);
  38. static_assert(abs(c) >= 0);
  39. static_assert(fabs(c) >= 0);
  40. constexpr float128 d(std::numeric_limits<float128>::epsilon());
  41. static_assert(fpclassify(c) == FP_NORMAL);
  42. constexpr float128 e((std::numeric_limits<float128>::min)());
  43. static_assert(fpclassify(e) == FP_NORMAL);
  44. constexpr float128 f((std::numeric_limits<float128>::max)());
  45. static_assert(fpclassify(f) == FP_NORMAL);
  46. constexpr float128 g(std::numeric_limits<float128>::lowest());
  47. static_assert(fpclassify(g) == FP_NORMAL);
  48. constexpr float128 h(std::numeric_limits<float128>::round_error());
  49. static_assert(fpclassify(h) == FP_NORMAL);
  50. constexpr float128 i(std::numeric_limits<float128>::denorm_min());
  51. static_assert(fpclassify(i) == FP_SUBNORMAL);
  52. constexpr float128 j(-std::numeric_limits<float128>::denorm_min());
  53. static_assert(fpclassify(j) == FP_SUBNORMAL);
  54. constexpr float128 k(std::numeric_limits<float128>::infinity());
  55. static_assert(fpclassify(k) == FP_INFINITE);
  56. static_assert(isinf(k));
  57. static_assert(!isnan(k));
  58. constexpr float128 l(-std::numeric_limits<float128>::infinity());
  59. static_assert(fpclassify(l) == FP_INFINITE);
  60. static_assert(isinf(l));
  61. static_assert(!isnan(l));
  62. }
  63. std::cout << "Done!" << std::endl;
  64. }