Краткое описание: Мне нужен простой автономный способ для заполнения моего ГСЧ, чтобы при каждом запуске программы начальное значение различалось.
Детали:
Мне часто приходится запускать одну и ту же программу (которая выполняет вычисления со случайными числами, например, моделирование по методу Монте-Карло и т. Д.), Чтобы получить хорошую статистику по результату. В этом случае важно, чтобы генератор случайных чисел имел разное начальное число при каждом запуске.
Я хотел бы иметь простое кроссплатформенное решение для этого, которое может содержаться в самой программе. (То есть я не хочу всегда сталкиваться с проблемой наличия сценария, который запускает каждый экземпляр программы с различным параметром seed.)
Обратите внимание, что использование time(0)
в качестве начального числа не является хорошим решением, поскольку разрешение таймера плохое: если несколько процессов запускаются параллельно, они, вероятно, получат одно и то же начальное число из time(0)
.
Требования:
- максимально просто
- кроссплатформенный (в настоящее время он мне нужен для работы только в Windows и Linux, x86 и x64).
- автономный: не следует полагаться на специальный способ запуска программы (передача начального числа в качестве параметра из сценария запуска - слишком большая проблема).
- Я хотел бы обернуть все это в небольшую библиотеку, которую я могу включить в любой новый проект с минимальными усилиями и просто сделать что-то вроде
SeedMyRNG(getSeed());
РЕДАКТИРОВАТЬ:
Хотя мой главный вопрос был о том, как сделать это на C (или C ++), основываясь на указателях, приведенных в ответе, я нашел os.urandom()
в качестве решения Python (что также полезно для меня).
Соответствующий соответствующий вопрос: Как использовать / dev / random или urandom в C?