Как в Си в linux активизировать генератор псевдослучайных чисел?

Модератор: Модераторы разделов

nikita Moroz
Сообщения: 54
ОС: Linux

Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение nikita Moroz »

Как в Си в linux активизировать генератор псевдослучайных чисел?
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение nesk »

nikita Moroz писал(а):
24.01.2008 13:31
Как в Си в linux активизировать генератор псевдослучайных чисел?

Случайное число
man srand
man rand
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
nikita Moroz
Сообщения: 54
ОС: Linux

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение nikita Moroz »

А можно поконкретнее, какие могут быть аргументы у функции srand?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение eduard_pustobaev »

Примерчег:

Код: Выделить всё

srand((unsigned)time(NULL));
double R = double(rand()/RAND_MAX);

Это от 0 до 1.
А так просто rand() без деления.
В дисгармонии со вселенной.
Спасибо сказали:
nikita Moroz
Сообщения: 54
ОС: Linux

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение nikita Moroz »

Спасибо, но есть проблемма, функция видимо преобразует системное время до секуннд. Что-то в таком роде. Короче говоря , если запускаешь srand((unsigned)time(NULL)) несколько раз в течении одной секунды, то получаем одни и теже значения. Вроде так.
Как это исправить?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение /dev/random »

Можно получать время функцией gettimeofday, и суммировать (как вариант - xor'ить) секунды с микросекундами.
А можно забить на этот геморрой с инициализацией, и просто читать из /dev/urandom.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение nesk »

/dev/random писал(а):
24.01.2008 17:46
и просто читать из /dev/urandom.

или инициализировать генератор значением из /dev/urandom :)
только вот зачем запускать srand несколько раз в течение одной секунды?
запускай его один раз в начале программы.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
drag0n
Сообщения: 156
Статус: Дракон-линуксоид
ОС: Slackware Linux

Re: Как в Си в linux активизировать генератор псевдослучайных чисел?

Сообщение drag0n »

Если программа одновременно запускается несколькими пользователями, то чтобы избежать совпадения сл. чисел:

Код: Выделить всё

srand (time (NULL) + getpid());
После каталога /etc понимаешь, что реестр - место, откуда нормальными не возвращаются.
Спасибо сказали: