I want to generate a list of class dependent random numbers, which means that even if we interrupt the process of generating random numbers with some rand() the generated list of random variables won't change as shown below.
#include <iostream>
#include <vector>
using namespace std;
class rand_generator_t {
public:
rand_generator_t(int seed) : _seed(seed) {}
int generate_one() {
srand(_seed);
int one_rand_num = rand();
_seed = one_rand_num;
return one_rand_num;
}
private:
int _seed;
};
int main() {
vector<int> nums(15);
rand_generator_t rand_num(1);
for (int i = 0; i < 7; ++i) {
nums[i] = rand_num.generate_one();
}
//rand(); <------ "rand_num" is class dependent because even if we add a "rand()" here, the output of "nums" does not change
for (int i = 7; i < 15; ++i) {
nums[i] = rand_num.generate_one();
}
for (int i : nums) {
cout << i << endl;
}
cout << "================================================" << endl;
srand(1);
for (int i = 0; i < 15; ++i) {
cout << rand() << " " << endl;
}
return 0;
}
I have the following confusions:
-
I use the previous generated random number as the seed of the current random variable. However, the result is different from just using a list of
rand(). I want to know if my version is uniformly distributed. -
How to improve my version of generating the class dependent random numbers.
-
I prefer using
rand(), please don't suggest me using something likestd::mt19937_64, since my compiler does not support that.
Thanks a lot in advance.
Aucun commentaire:
Enregistrer un commentaire