8 #ifndef CVMFS_UTIL_PRNG_H_
9 #define CVMFS_UTIL_PRNG_H_
20 #ifdef CVMFS_NAMESPACE_GUARD
21 namespace CVMFS_NAMESPACE_GUARD {
30 Prng() throw() { state_ = 0; }
32 void InitSeed(
const uint64_t seed) { state_ = seed; }
35 struct timeval tv_now;
36 int retval = gettimeofday(&tv_now, NULL);
38 state_ = tv_now.tv_usec;
44 uint32_t
Next(
const uint64_t boundary) {
45 state_ = a * state_ + c;
46 double scaled_val =
static_cast<double>(state_)
47 * static_cast<double>(boundary)
48 /
static_cast<double>(18446744073709551616.0);
49 return static_cast<uint32_t
>(
static_cast<uint64_t
>(scaled_val) % boundary);
56 state_ = a * state_ + c;
57 double unit_val =
static_cast<double>(state_)
58 / static_cast<double>(18446744073709551616.0);
68 double pi = atan(1) * 4;
71 z = sqrt(-2.0 * log(u1)) * cos(2 * pi * u2);
79 static const uint64_t a = 6364136223846793005LLU;
80 static const uint64_t c = 1442695040888963407LLU;
84 #ifdef CVMFS_NAMESPACE_GUARD
88 #endif // CVMFS_UTIL_PRNG_H_
assert((mem||(size==0))&&"Out Of Memory")
void InitSeed(const uint64_t seed)
uint32_t Next(const uint64_t boundary)