На справочной странице моей системы (которая взята из проекта справочных страниц Linux) говорится:
Эти функции объявлены устаревшими согласно SVID 3, в котором указано, что вместо них следует использовать rand(3)
.
SVID 3 был опубликован в 1989 году.
SVID 4 (ссылка на 720-страничный PDF-файл), опубликовано в 1995 году документы drand48
, erand48
, lrand48
, nrand48
, mrand48
, jrand48
, srand48
, seed48
и lcong48
и, как и POSIX, ничего не говорят о том, что они устарели.
POSIX по состоянию на 2013 год ничего не говорит о том, что они устарели, или устарел.
Я не нашел копию SVID 3, поэтому не знаю, почему он объявил эти функции устаревшими, но, видимо, позже это решение было пересмотрено. Заявление на странице руководства кажется устаревшей информацией. Я бы не беспокоился об этом.
Что касается того, какую функцию вы должны использовать, стандартная функция C rand()
является наиболее переносимой (если вы не перекомпилируете другую функцию из исходного кода). Некоторые реализации rand()
имеют низкое качество, младшие биты повторяются очень регулярно; другие немного лучше.
Если вам не нужны псевдослучайные числа высокого качества, вы также можете использовать rand()
(заполненный вызовом srand()
с разумным значением, например, srand(time(NULL))
.
Если вам нужны высококачественные псевдослучайные числа, скорее всего, ни одна из этих функций недостаточно хороша, я бы не советовал использовать какую-либо из них, например, для криптографии. Вы можете использовать /dev/urandom
или /dev/random
, если ваша система это поддерживает. Я слышал хорошие отзывы о Mersenne Twister, но мне не хватает опыта, чтобы комментировать дальше.
(Кстати, если вы ищете в Google SVID, обратите внимание на Svið).
person
Keith Thompson
schedule
13.08.2014
drand48
и его друзей и ничего не говорит о том, что они устарели. - person Keith Thompson   schedule 12.08.2014