Real.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef MANDEL_REAL_H
  2. #define MANDEL_REAL_H
  3. #include <boost/multiprecision/cpp_bin_float.hpp>
  4. #include <boost/multiprecision/cpp_int.hpp>
  5. namespace mnd
  6. {
  7. using Float512 = boost::multiprecision::number<
  8. boost::multiprecision::backends::cpp_bin_float<
  9. 496, boost::multiprecision::backends::digit_base_2, void, boost::int16_t, -16382, 16383>,
  10. boost::multiprecision::et_off>;
  11. using Float2048 = boost::multiprecision::number<
  12. boost::multiprecision::backends::cpp_bin_float<
  13. 2016, boost::multiprecision::backends::digit_base_2, std::allocator<void>, boost::int32_t, -16777214, 16777215>,
  14. boost::multiprecision::et_off>;
  15. using Real = Float512;
  16. using Integer = boost::multiprecision::int512_t;
  17. inline Real abs(const Real& x) { return boost::multiprecision::abs(x); }
  18. inline Real sqrt(const Real& x) { return boost::multiprecision::sqrt(x); }
  19. inline Real floor(const Real& x) { return boost::multiprecision::floor(x); }
  20. inline Real log(const Real& x) { return boost::multiprecision::log(x); }
  21. inline Real log2(const Real& x) { return boost::multiprecision::log2(x); }
  22. inline Real pow(const Real& x, const Real& y) { return boost::multiprecision::pow(x, y); }
  23. inline Real atan2(const Real& y, const Real& x) { return boost::multiprecision::atan2(y, x); }
  24. inline Real cos(const Real& x) { return boost::multiprecision::cos(x); }
  25. inline Real sin(const Real& x) { return boost::multiprecision::sin(x); }
  26. inline Real exp(const Real& x) { return boost::multiprecision::exp(x); }
  27. std::string toString(const Real& num);
  28. std::string toLegibleString(const Real& num);
  29. }
  30. #endif // MANDEL_REAL_H