50 unsigned long a = clock();
51 unsigned long b = time(NULL);
52 unsigned long c = getpid();
53 a-=b; a-=c; a^=(c >> 13); b-=c; b-=a; b^=(a << 8); c-=a; c-=b; c^=(b >> 13);
54 a-=b; a-=c; a^=(c >> 12); b-=c; b-=a; b^=(a << 16); c-=a; c-=b; c^=(b >> 5);
55 a-=b; a-=c; a^=(c >> 3); b-=c; b-=a; b^=(a << 10); c-=a; c-=b; c^=(b >> 15);
68 LOG(WARNING) <<
"max <= 0. Returning 0.";
74 return Integer() %
static_cast<int>(max + 1);
79 LOG(WARNING) <<
"min >= max. Returning min.";
85 return min + (
Integer() %
static_cast<int>(max - min + 1));
89 if (integers ==
nullptr) {
93 for (
size_t i = 0; i < count; ++i) {
99 std::vector<int>* integers) {
100 if (integers ==
nullptr) {
104 for (
size_t i = 0; i < count; ++i) {
110 return static_cast<double>(
Integer()) / static_cast<double>(RAND_MAX);
115 LOG(WARNING) <<
"min >= max. Returning min.";
121 double coefficient = (max - min) / static_cast<double>(RAND_MAX);
122 return min +
static_cast<double>(
Integer()) * coefficient;
129 double u = 1.0 -
Double();
131 double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v);
133 return mean + stddev * z;
137 if (doubles ==
nullptr) {
141 for (
size_t i = 0; i < count; ++i) {
142 doubles->push_back(
Double());
147 std::vector<double>* doubles) {
148 if (doubles ==
nullptr) {
152 for (
size_t i = 0; i < count; ++i) {
158 std::vector<double>* doubles) {
159 if (doubles ==
nullptr) {
163 for (
size_t i = 0; i < count; ++i) {
double DoubleGaussian(double mean, double stddev)
void Integers(size_t count, std::vector< int > *integers)
void Doubles(size_t count, std::vector< double > *doubles)
int IntegerUniform(int max)
void DoublesGaussian(size_t count, double mean, double stddev, std::vector< double > *doubles)
void IntegersUniform(size_t count, int min, int max, std::vector< int > *integers)
double DoubleUniform(double min, double max)
void DoublesUniform(size_t count, double min, double max, std::vector< double > *doubles)
static unsigned long Seed()
RandomGenerator(unsigned long seed)