Types.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "Types.h"
  2. #include <sstream>
  3. namespace mnd
  4. {
  5. #ifdef WITH_BOOST
  6. std::string toString(const Real& num)
  7. {
  8. return num.str();
  9. }
  10. std::string toLegibleString(const Real& num)
  11. {
  12. if (num == Real(0.0)) {
  13. return "0";
  14. }
  15. int exponent = std::floor(static_cast<float>(mnd::log(num)) / ::logf(10.000001));
  16. float fac = static_cast<float>(num / mnd::pow(Real(10), Real(exponent)));
  17. std::stringstream ss;
  18. ss.precision(3);
  19. ss << std::fixed << fac << "e";
  20. if (exponent < 0)
  21. ss << "-" << -exponent;
  22. else
  23. ss << "+" << exponent;
  24. return ss.str();
  25. }
  26. #else // !WITH_BOOST
  27. std::string toString(const Real& num)
  28. {
  29. std::stringstream ss;
  30. ss << num;
  31. return ss.str();
  32. }
  33. #endif // WITH_BOOST
  34. /*
  35. template<>
  36. constexpr Real precision<float>(void)
  37. {
  38. return 1.0e-7;
  39. }
  40. template<>
  41. constexpr Real precision<double>(void)
  42. {
  43. return 1.0e-15;
  44. }
  45. #ifdef WITH_QD
  46. template<>
  47. constexpr Real precision<DoubleDouble>(void)
  48. {
  49. return Real("1.0e-29");
  50. }
  51. template<>
  52. constexpr Real precision<QuadDouble>(void)
  53. {
  54. return Real("1.0e-57");
  55. }
  56. #endif // WITH_QD
  57. #ifdef WITH_BOOST
  58. template<>
  59. constexpr Real precision<Float128>(void)
  60. {
  61. return Real("1.0e-29");
  62. }
  63. template<>
  64. constexpr Real precision<Float256>(void)
  65. {
  66. return Real("1.0e-60");
  67. }
  68. #endif // WITH_BOOST
  69. */
  70. }