Хороший генератор случайных чисел для C

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам