Мне дано полагать, что генераторы случайных чисел (RNG) следует выставлять только один раз, чтобы гарантировать, что распределение результатов будет таким, как предполагалось.Использование одного и того же генератора случайных чисел для нескольких функций
Я пишу моделирования методом Монте-Карло в C++, который состоит из главной функции («A») вызов другой функции («В») в несколько раз, когда большое количество случайных чисел генерируется в B.
в настоящее время я делаю следующее B:
void B(){
std::array<int, std::mt19937::state_size> seed_data;
std::random_device r;
std::generate(seed_data.begin(), seed_data.end(), std::ref(r));
std::seed_seq seq(std::begin(seed_data), std::end(seed_data)); //perform warmup
std::mt19937 eng(seq);
std::uniform_real_distribution<> randU(0,1);
double myRandNum = randU(eng);
//do stuff with my random number
}
Как вы можете видеть, я создаю новый генератор случайных чисел каждый раз, когда я вызываю функцию В. это, насколько я понимаю, это пустая трата времени - РНГ все еще может генерировать намного больше случайных чисел!
Я экспериментировал с созданием «англ» EXTERN но генерирует ошибку, используя г ++:
об ошибке: «» англ имеет как «Экстерн» и инициализатора Экстерн зЬй :: mt19937 анг (Seq);
Как сделать генератор случайных чисел «глобальным», чтобы я мог его использовать много раз?
Почему бы вам не поместить все объекты RNG, которые вам нужны в структуре, и передать их по ссылке там, где вы хотите? –