default_random_engine не рандомизирует значения для меня

Когда я запускаю свою функцию, мои значения x и y остаются неизменными при каждом запуске. Я не уверен, неправильно ли я использую default_random_engine или нет. Как я могу получить свои значения x и y, используя dist(engine) для рандомизации и не получать один и тот же результат при каждом выполнении программы?


person Tyler    schedule 30.09.2013    source источник
comment
Забудьте о default_random_engine, его включение в стандарт было ошибкой. Вместо этого используйте mt19937 или mt19937_64.   -  person Konrad Rudolph    schedule 01.10.2013
comment
Покажите какой-нибудь код. Без него невозможно сказать, неправильно вы используете default_random_engine или нет.   -  person Pete Becker    schedule 01.10.2013


Ответы (1)


«Семя» — это то, что обеспечивает генератор псевдочисел своей «случайностью». Если вы инициализируете его одним и тем же начальным числом, вы получите тот же «случайный» шаблон.

Здесь вы, вероятно, все время передаете одно и то же семя.

Возможно, вам следует определить свою функцию следующим образом:

long double fn( long reps, default_random_engine & engine )

Объявите один экземпляр вашего генератора случайных чисел при запуске вашей программы и задайте для него один раз значение, которое всегда будет другим при запуске вашей программы (например, системное время ). Затем передайте генератор в любые функции, требующие генерации случайных чисел.

person paddy    schedule 30.09.2013
comment
Итак, если бы я хотел передать семена 1-10 через генератор, как бы я это сделал? - person Tyler; 01.10.2013
comment
Может быть, я неправильно понял ваш вопрос? Сначала казалось, что вам не нужно одно и то же семя. Вы говорите, что получаете одну и ту же последовательность независимо от того, какое семя вы используете? Или вы просто хотите использовать 10 разных семян, но чтобы они каждый раз менялись при запуске программы? - person paddy; 01.10.2013
comment
Извините, возможно, было неясно. Я хочу использовать 10 разных семян, конкретно 1-10. - person Tyler; 01.10.2013
comment
Вы сказали: Как я могу сделать так, чтобы мои значения x и y рандомизировались, а вывод не был одинаковым при каждом выполнении программы?. Ответ заключается в том, чтобы каждый раз использовать разные семена. Если вы заставите свою программу использовать только начальные числа 1-10 (например, seed = 1 + (time(0) % 10);), ваша программа будет иметь только 10 уникальных случайных последовательностей. - person paddy; 01.10.2013