2013-02-15 2 views
7

Мне нужен хороший генератор случайных чисел для программы, которую я пишу на C. Это генератор фрактального пламени, если вам интересно. Мои изображения выглядели очень зернистыми, хотя в прошлом у меня был успех с тем же алгоритмом. Разница, я наконец поняла, была генератором случайных чисел, который я использовал. Невероятно, это делает РАЗНОМАЮЩАЯ разница. Я надеюсь, что еще лучший генератор случайных чисел может дать лучшие результаты. Ответ может быть выполнен в виде примера кода или ссылки на ранее существовавшую библиотеку случайных чисел. Наиболее важные требования:Хороший генератор случайных чисел для C

  • он должен производить относительно высокого качества потоков случайных чисел
  • его период должен быть более чем десять миллиардов
  • она должна быть достаточно быстро и предлагают хорошую производительность компромисс.
+0

http://en.wikipedia.org/wiki/Comparison_of_hardware_random_number_generators – JosephH

+0

этот вопрос справедливо ИМХО. Немного сфокусировано, но все еще актуально в требованиях. – UmNyobe

+1

@UmNyobe Я назначил этот вопрос для повторного открытия. Я не понимаю, почему это «не настоящий вопрос». Не хороший вопрос? Может быть, но он все еще действительный. – Philipp

ответ

9

Это похоже на хороший пример использования для Mersenne Twister

  • Это быстрее, чем большинство стандартных реализаций рандов()
  • Она имеет очень длинный (2^19937 - 1) период
  • он имеет довольно высокое качество - она ​​проходит наиболее стандартизированная хаотичность тесты
  • это общественное достояние
+0

нет, он дает кандидата. +1 кстати, никогда не слышал о Мерсенне до – UmNyobe

+0

Вау, это похоже на ДЕЙСТВИТЕЛЬНО хороший генератор случайных чисел. Большое спасибо Филиппу, я бы никогда не нашел это сам. –

+1

Я удивлен, что MT быстрее, чем большинство реализаций 'rand()'. Разве это не 'rand()' обычно LCG, следовательно, очень быстрое, но плохое качество? –

4

Если вы ищете очень быстрый, достойный алгоритм качества, вы должны подумать о xorshift128+ или xorshift1024*. Они почти такие же быстрые, как и LCG (по моему сравнению они только на 30% медленнее, чем просто встроенные LCG), имея гораздо лучшее качество, чем LCG в то же время.

Вы можете найти свой код и сравнение здесь: http://xorshift.di.unimi.it/

+1

Недостаточный ответ здесь - я использовал их в нескольких проектах до сих пор, и они отлично работают с такой простой реализацией! –