#ifndef _MATH_UTILS_ #define _MATH_UTILS_ #include #include namespace pvfmm { template inline Real const_pi() { return 3.1415926535897932384626433832795028841; } template inline Real const_e() { return 2.7182818284590452353602874713526624977; } template inline Real fabs(const Real f) { return ::fabs(f); } template inline Real sqrt(const Real a) { return ::sqrt(a); } template inline Real sin(const Real a) { return ::sin(a); } template inline Real cos(const Real a) { return ::cos(a); } template inline Real exp(const Real a) { return ::exp(a); } template inline Real log(const Real a) { return ::log(a); } template inline Real pow(const Real b, const Real e) { return ::pow(b, e); } template 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); } } // end namespace #ifdef PVFMM_QUAD_T namespace pvfmm { typedef PVFMM_QUAD_T QuadReal; QuadReal atoquad(const char* str); } std::ostream& operator<<(std::ostream& output, const pvfmm::QuadReal q_); #endif // PVFMM_QUAD_T #include #endif //_MATH_UTILS_HPP_