Очень схематично, моя цель - генерировать случайные числа хорошего качества внутри функции. Я хотел бы заполнить генератор случайных чисел статической переменной, чтобы мне не приходилось заполнять каждый раз, когда я вызываю функцию.
Я генерирую случайные числа, используя gsl (https://www.gnu.org/software/gsl/doc/html/rng.html).. Предполагается, что они имеют лучшее качество, чем сгенерированные с помощью rand (), и более эффективно, чем сгенерированные с помощью механизма std :: mt19937. .
gsl_rng* Initialize() { //INITIALIZE
int rand_seed = 77711; //any integer
srand(time(NULL));
const gsl_rng_type* gsl_rng_T;
gsl_rng* r; //The random variable
gsl_rng_env_setup();
gsl_rng_default_seed = rand_seed;
gsl_rng_T = gsl_rng_default;
r = gsl_rng_alloc(gsl_rng_T);
return r;
}
int random_int(int n) { //Generate integer random variable in [0,n[
static gsl_rng* r2 = Initialize(); //Initialize as static
return gsl_rng_uniform_int(r2, n);
}
void Calculations(/*Variables that have nothing to do with the random numbers*/) {
//Stuff
int position = random_int(Info.I);
//Info.I is an integer member of the class "Info", its value changes //with each call of the function "Calculations".
//.
//.
//.
return;
}
Мне приходится часто вызывать функцию «Расчеты», значения «позиция» при каждом вызове сильно коррелированы (не совсем случайные). Я в основном всегда получаю один и тот же вывод для «позиции».
Я новичок в C ++, я привык использовать FORTRAN и прошу прощения за ужасное кодирование!
Я связал вопросы, я видел, что люди определяют класс для семени. Есть ли польза от этого? Кто-то рекомендует другой метод или генератор случайных чисел?
Большое спасибо:)