Можно ли сгенерировать начальное число для случайных чисел в качестве статической переменной функции? - PullRequest
0 голосов
/ 04 июня 2019

Очень схематично, моя цель - генерировать случайные числа хорошего качества внутри функции. Я хотел бы заполнить генератор случайных чисел статической переменной, чтобы мне не приходилось заполнять каждый раз, когда я вызываю функцию.

Я генерирую случайные числа, используя 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 и прошу прощения за ужасное кодирование!

Я связал вопросы, я видел, что люди определяют класс для семени. Есть ли польза от этого? Кто-то рекомендует другой метод или генератор случайных чисел?

Большое спасибо:)

...