Хороший генератор случайных чисел для C
Мне нужен хороший генератор случайных чисел для программы, которую я пишу на C. Это фрактальный генератор пламени, если вам интересно. Мои изображения получались очень зернистыми, хотя в прошлом у меня был тот же алгоритм. Разница, наконец, я понял, был в генераторе случайных чисел, который я использовал. Невероятно, это имеет огромное значение. Я надеюсь, что даже лучший генератор случайных чисел может дать лучшие результаты. Ответ может прийти в виде примера кода или ссылки на уже существующую библиотеку случайных чисел. Самые важные требования:
- он должен производить относительно качественные потоки случайных чисел
- его период должен быть более десяти миллиардов
- он должен быть достаточно быстрым и предлагать компромисс с хорошей производительностью.
2 ответа
Это похоже на хороший пример использования Mersenne Twister
- Это быстрее, чем большинство стандартных реализаций rand()
- У него очень длинный (2^19937 - 1) период
- Он имеет довольно высокое качество - он проходит большинство стандартных тестов на случайность
- Это общественное достояние
Если вы ищете очень быстрый, достойный алгоритм качества, вы должны подумать о xorshift128+
или же xorshift1024*
, Они почти такие же быстрые, как LCG (согласно моему сравнению, они только на 30% медленнее, чем просто встроенные LCG), и имеют гораздо лучшее качество, чем LCG в то же время.
Вы можете найти их код и сравнение здесь: http://xorshift.di.unimi.it/