Лучший случайный алгоритм? - PullRequest
5 голосов
/ 16 декабря 2009

Я делаю игру на C ++, и она включает в себя заполнение тайлов случайными логическими значениями (да или нет), независимо от того, "да" или нет, определяется rand() % 1 Это не кажется очень случайным.

Я использую srand с ctime при запуске, но похоже, что появляются те же шаблоны.

Существуют ли алгоритмы, которые будут создавать очень случайные числа? Или какие-либо предложения о том, как я мог бы улучшить rand()?

Ответы [ 14 ]

0 голосов
/ 16 декабря 2009

Кнут предлагает генерацию случайных чисел вычитающим методом. Это считается довольно случайным. Пример реализации на языке Scheme см. здесь

0 голосов
/ 16 декабря 2009

Люди говорят, что младшие биты не случайны. Так что попробуйте что-нибудь с середины. Это даст вам 28-й бит:

(rand() >> 13) % 2
0 голосов
/ 16 декабря 2009

Быстрая вещь, которая может заставить ваши числа казаться немного более случайными, состоит в том, чтобы заново запускать генератор каждый раз, когда условие if(rand() % 50==0) выполняется.

0 голосов
/ 16 декабря 2009

Также, если вы посеете слишком быстро, вы получите точно такой же номер. Лично я использую класс, который обновляет семя, только когда время изменилось.

...