math_utils.hpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef _MATH_UTILS_
  2. #define _MATH_UTILS_
  3. #include <cmath>
  4. #include <ostream>
  5. namespace pvfmm {
  6. template <class Real> inline Real const_pi() { return 3.1415926535897932384626433832795028841; }
  7. template <class Real> inline Real const_e() { return 2.7182818284590452353602874713526624977; }
  8. template <class Real> inline Real fabs(const Real f) { return ::fabs(f); }
  9. template <class Real> inline Real sqrt(const Real a) { return ::sqrt(a); }
  10. template <class Real> inline Real sin(const Real a) { return ::sin(a); }
  11. template <class Real> inline Real cos(const Real a) { return ::cos(a); }
  12. template <class Real> inline Real exp(const Real a) { return ::exp(a); }
  13. template <class Real> inline Real log(const Real a) { return ::log(a); }
  14. template <class Real> inline Real pow(const Real b, const Real e) { return ::pow(b, e); }
  15. template <Integer N, class T> constexpr T pow(const T& x) { return N > 1 ? x * pow<(N - 1) * (N > 1)>(x) : N < 0 ? T(1) / pow<(-N) * (N < 0)>(x) : N == 1 ? x : T(1); }
  16. } // end namespace
  17. #ifdef PVFMM_QUAD_T
  18. namespace pvfmm {
  19. typedef PVFMM_QUAD_T QuadReal;
  20. QuadReal atoquad(const char* str);
  21. }
  22. std::ostream& operator<<(std::ostream& output, const pvfmm::QuadReal q_);
  23. #endif // PVFMM_QUAD_T
  24. #include <pvfmm/math_utils.txx>
  25. #endif //_MATH_UTILS_HPP_