Что такое хороший генератор случайных чисел для использования в игре на С++?
Мои соображения:
- Требуется множество случайных чисел, поэтому скорость хорошая.
- Игроки всегда будут жаловаться на случайные числа, но я хотел бы указать их на ссылку, поясняющую, что я действительно выполнял свою работу.
- Поскольку это коммерческий проект, на который у меня мало времени, было бы неплохо, если бы алгоритм либо a) был относительно прост в реализации, либо b) имел хорошую реализацию, отличную от GPL.
- Я уже использую
rand()
в довольно многих местах, поэтому любой другой генератор должен быть хорошим, чтобы оправдать все изменения, которые ему потребуются.
Я не очень разбираюсь в этом вопросе, поэтому единственной альтернативой, которую я мог бы придумать, является Mersenne Twister; удовлетворяет ли это всем этим требованиям? Что еще лучше?
Изменить: Мерсенн Твистер, похоже, является консенсусным выбором. Но как насчет точки №4? Действительно ли это намного лучше, чем rand()
?
Изменить 2: Позвольте мне быть немного понятнее в пункте 2: игрокам нет возможности обманывать, зная случайные числа. Период. Я хочу, чтобы это было достаточно случайным, чтобы люди (по крайней мере те, кто понимает случайность) не могут жаловаться на это, но меня не беспокоят прогнозы. Вот почему я ставлю скорость в качестве главного внимания.
Редактировать 3: Сейчас я склоняюсь к рунам Marsaglia, но мне все равно нравится больше информации. Поэтому я создаю щедрость.
Редактировать 4: Только примечание: я намерен принять ответ перед полуночью UTC сегодня (чтобы не возиться с кем-то из игроков). Поэтому, если вы хотите ответить, не ждите до последней минуты! Кроме того, мне нравятся генераторы Marsaglia XORshift. Кто-нибудь имеет какие-либо сведения о них?