1#ifndef LIPH_NUMERIC_RANDOM_H_
2#define LIPH_NUMERIC_RANDOM_H_
46 static std::string
gen_str(
size_t size, std::string_view charset =
"0123456789");
52 if (!
next_bytes(&ret,
sizeof(T)))
throw std::runtime_error(
"fetch next random bytes fail");
60 explicit randomizer(uint64_t n) : n_(n), d_(0, n_) {}
63 uint64_t operator()() {
return d_(e); }
67 std::uniform_int_distribution<uint64_t> d_;
69 static std::random_device r;
70 static std::default_random_engine e;
77 rand(uint32_t seed = 1) { ::srand(seed); }
81 rand(uint32_t seed = 1) : seed_(seed & 0x7fffffffu) {
82 if (seed_ == 0 || seed_ == 2147483647L) {
89 static const uint32_t M = 2147483647L;
90 static const uint64_t A = 16807;
92 uint64_t product = seed_ * A;
93 seed_ =
static_cast<uint32_t
>((product >> 31) + (product & M));
100 static uint32_t
min() {
return 1; }
101 static uint32_t
max() {
return 2147483646L; }
rand(uint32_t seed=1)
Definition: random.h:81
uint32_t operator()()
generate random number range [min(), max()]
Definition: random.h:88
static uint32_t max()
Definition: random.h:101
static uint32_t min()
Definition: random.h:100
Definition: algorithm.h:10
static float next_float()
generate random float
Definition: random.h:29
static int32_t gen_int(int32_t a, int32_t b)
Definition: random.h:40
static std::string gen_str(size_t size, std::string_view charset="0123456789")
generate random string of length size from charset
Definition: random.cpp:34
static double next_double()
generate random double
Definition: random.h:32
static uint64_t next_uint64()
generate random uint64_t
Definition: random.h:26
static int64_t next_int64()
generate random int64_t
Definition: random.h:23
static uint32_t next_uint32()
generate random uint32_t
Definition: random.h:20
static int32_t next_int32()
generate random int32_t
Definition: random.h:17
static int32_t gen_int(int32_t n)
Definition: random.h:36
static double gen_real()
generate double range [0, 1)
Definition: random.h:43
static bool next_bytes(void *ptr, size_t n)
generate random n bytes
Definition: random.cpp:16