Несмотря на все предложения людей rand()
здесь, вы не хотите использовать rand()
, если вам не нужно! Случайные числа, которые выдает rand()
, часто бывают очень плохими. Цитата из справочной страницы Linux:
Версии rand()
и srand()
в библиотеке Linux C используют тот же генератор случайных чисел, что и random(3)
и srandom(3)
, поэтому биты младшего разряда должны быть такими же случайными, как биты старшего разряда. Однако в более старых реализациях rand () и в текущих реализациях в разных системах биты младшего разряда намного менее случайны, чем биты высшего порядка . Не используйте эту функцию в приложениях, предназначенных для переноса, когда необходима хорошая случайность. ( Вместо этого используйте random(3)
. )
Что касается переносимости, random()
также определяется стандартом POSIX уже довольно давно. rand()
старше, он появился уже в первой спецификации POSIX.1 (IEEE Std 1003.1-1988), тогда как random()
впервые появился в POSIX.1-2001 (IEEE Std 1003.1-2001), однако текущий стандарт POSIX уже POSIX.1-2008 (стандарт IEEE 1003.1-2008), который получил обновление всего год назад (стандарт IEEE 1003.1-2008, издание 2016 г.). Поэтому я считаю random()
очень портативным.
POSIX.1-2001 также представил функции lrand48()
и mrand48()
, см. Здесь :
Это семейство функций должно генерировать псевдослучайные числа, используя линейный конгруэнтный алгоритм и 48-разрядную целочисленную арифметику.
И довольно хорошим псевдослучайным источником является функция arc4random()
, которая доступна во многих системах. Не является частью какого-либо официального стандарта, появившегося в BSD в 1997 году, но его можно найти в таких системах, как Linux и macOS / iOS.