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