Может ли кто-нибудь сказать мне, как создавать одинаковые значения случайного числа в C++?
Я знаю в Matlab, что могу сделать следующее:
rng(1)
a= randi(10,1,10)
Ответ будет таким же. Например
5 8 1 4 2 1 2 4 4 6
5 8 1 4 2 1 2 4 4 6
5 8 1 4 2 1 2 4 4 6
Это даст мне одинаковые значения во все времена, если семя не будет сброшено.
Но я не знаю, как это сделать в C++.
Две разные инициализации с одним и тем же семенем будут генерировать одну и ту же последовательность результатов в последующих вызовах rand.
Если seed установлен в 1, генератор повторно инициализируется до его начального значения и выдает те же значения, что и перед любым вызовом rand или srand.
#include <stdlib.h> /* srand, rand */
#include <time.h>
int random = rand();
int next = rand();
int next2 = rand();
//another sequence
srand (time(NULL));
int 2random = rand();
int 2next = rand();
int 2next2 = rand();
//will repeat the first sequence
srand (1);
int 3random = rand();
int 3next = rand();
int 3next2 = rand();
Создайте экземпляр std::random_device
, который предоставляет, возможно, недетерминированные равномерные случайные числа, и используйте его для засева произвольного числа по вашему выбору:
std::random_device rd;
std::default_random_engine gen(rd());
Если вы хотите знать, как семять функцию библиотеки rand
, вам нужно использовать std::srand
. Он обычно засевается текущим временем, std::time(0)
.
Конечно, нет причин, по которым вы не могли бы использовать std::random_device
для семян rand
.
Вы ищете функцию srand, которая семена генератора случайных чисел? Он часто используется для посева с текущим временем, но вы можете использовать его для посева с фиксированным значением, если хотите.