Случайные числа в POSIX C API - PullRequest
5 голосов
/ 31 января 2011

Я рассчитываю генерировать большие неотрицательные целочисленные случайные значения в системе POSIX. Я нашел 2 возможные функции, которые отвечают всем требованиям, и их соответствующие инициализаторы:

       #include <stdlib.h>

       long int random(void);    
       void srandom(unsigned int seed);
CONFORMING TO
       4.3BSD, POSIX.1-2001.

       // and

       long int lrand48(void);
       void srand48(long int seedval);    
CONFORMING TO
       SVr4, POSIX.1-2001.
  1. Какие функции предпочтительнее (потокобезопасность и диапазон генерируемых значений)?
  2. Учитывая, что безопасность не является проблемой, как я должен их сеять?
  3. Должны ли методы заполнения отличаться из-за различных аргументов для функций заполнения (long int против unsigned int)?

1 Ответ

3 голосов
/ 31 января 2011

Используйте nrand48, он имеет тот же диапазон, что и lrand48, и получает указатель на массив, используемый в качестве начального числа. если сделать этот поток локальным, это обеспечит его безопасность. (как примечание, кажется, что реализация glibc может иметь некоторые проблемы, см. http://evanjones.ca/random-thread-safe.html для получения дополнительной информации, эта страница также содержит хороший обзор поточно-безопасных функций генерации случайных чисел)

...