Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Альтернатива rand в СИ

#c #linux #случайные_числа


Столкнулся с замечательной функцией rand при построении программы на СИ в ОС Linux.
Знаю, что нужно инициализировать генератор с помощью srand.

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

Есть ли альтернатива rand. которая позволит при одновременном запуске программы (т.е.
несколько потоков) каждому экземпляру получить разное число?
    


Ответы

Ответ 1



У srand есть параметр - инициализационное число "случайной" последовательности. Обычно его задают как текущее время. При одновременном старте двух процессов время одинаковое и последовательность получается одинаковая. Вам надо сделать это число уникальным для каждого запускаемого процесса. Для этого можно использовать, например, текущее время умноженное на ID текущего процесса. Или использовать какую нибудь другую уникальную характеристику процесса.

Ответ 2



Если не принципиально и возможно использовать c++11, то работа со псевдослучайными последовательностями там значительно расширена. Также для инициализации в c++11 можно использовать все тоже время, но взятое, скажем, в наносекундах, что даже в Вашем случае даст разные последовательности.

Комментариев нет:

Отправить комментарий