4 #ifdef HAVE_LIBQUADMATH
5 #include <boost/multiprecision/float128.hpp>
23 static inline size_t factorial(
size_t f)
27 for (
size_t s = 2 ; s <= f ; s++)
48 static inline size_t C(
size_t n,
size_t k)
50 return factorial(n)/(factorial(k)*factorial(n-k));
63 static inline size_t round_big_2(
size_t n)
90 inline constexpr
size_t pow(
const T base,
unsigned const exponent)
93 return (exponent == 0) ? 1 : (base * pow(base, exponent-1));
105 static inline long int positive_modulo(
long int i,
long int n)
107 return (i % n + n) % n;
125 template<
typename T>
static inline T periodic(
const T & pos,
const T & p2,
const T & p1)
129 pos_tmp = pos - (p2 - p1) * (
long int)( (pos -p1) / (p2 - p1));
130 pos_tmp += (pos < p1)?(p2 - p1):0;
152 template<
typename T>
static inline T periodic_l(
const T & pos,
const T & p2,
const T & p1)
158 pos_tmp = p1 + (pos - p2);
162 pos_tmp = p2 - (p1 - pos);
177 inline long int size_t_floor(
double x)
179 size_t i = (
long int)x;
180 return i - ( i > x );
187 inline long int size_t_floor(
float x)
189 size_t i = (
long int)x;
190 return i - ( i > x );
193 const int tab64[64] = {
194 63, 0, 58, 1, 59, 47, 53, 2,
195 60, 39, 48, 27, 54, 33, 42, 3,
196 61, 51, 37, 40, 49, 18, 28, 20,
197 55, 30, 34, 11, 43, 14, 22, 4,
198 62, 57, 46, 52, 38, 26, 32, 41,
199 50, 36, 17, 19, 29, 10, 13, 21,
200 56, 45, 25, 31, 35, 16, 9, 12,
201 44, 24, 15, 8, 23, 7, 6, 5};
208 inline int log2_64 (uint64_t value)
214 value |= value >> 16;
215 value |= value >> 32;
216 return tab64[((uint64_t)((value - (value >> 1))*0x07EDD5E59A4E28C2)) >> 58];
219 #ifdef HAVE_LIBQUADMATH
225 inline long int size_t_floor(boost::multiprecision::float128 x)
227 size_t i = (
long int)x;
228 return i - ( i > x );