#ifndef __COSMOTOOL_ALGO_HPP #define __COSMOTOOL_ALGO_HPP #include "config.hpp" namespace CosmoTool { template T cube(T a) { return a*a*a; } template T square(T a) { return a*a; } template class SPowerBase { public: template static T spower(T a) { if ((N%2)==0) { T b = SPowerBase::spower(a); return b*b; } T b = SPowerBase<(N-1)/2>::spower(a); return a*b*b; } }; template<> class SPowerBase<0> { public: template static T spower(T a) { return T(1); } }; template T spower(T a) { return SPowerBase::spower(a); } }; #endif