Страница man для rand_r()
сообщает:
Значение, на которое указывает аргумент seedp функции rand_r (), предоставляет только очень небольшое количество состояний, поэтому эта функция будет слабой псевдо -лучайный генератор.
Может ли кто-нибудь объяснить, что означает это предложение? Как получается, что начальное значение «обеспечивает только очень небольшое количество состояния», и как это ослабляет генератор?
Прежде чем я начну использовать расширение GNU drand48_r()
в качестве лучшей альтернативы, я хочу будь уверен, что я делаю осознанный выбор. Возможно, для некоторых вариантов использования достаточно rand_r()
, иначе не было бы смысла в его доступности.
РЕДАКТИРОВАТЬ в ответ на комментарии:
I wi sh чтобы лучше понять функции и способ их объяснения, предпочтительно без ссылки на конкретный вариант использования, который может ограничить объяснение. На net обсуждается множество вариантов использования, но общие знания о функциях либо отсутствуют, либо их трудно понять. Так что в прошлом у меня были отличные ответы на вопросы и ответы, поэтому мой вопрос.
Если это поможет, я провел тест для сравнения rand()
и rand_r()
, создав два случайных изображения RGB, в которых пиксели были сгенерировано с помощью:
pxsPtr[i] = (uint8_t) rand() % 255; // rand() version
pxsPtr[i] = (uint8_t) rand_r(&randRseed) % 255; // rand_r() version
Я удивлен их сходством и теперь еще больше стремлюсь получить ответы на мои вопросы.
![rand() test](https://i.stack.imgur.com/nxKZV.png)
![rand_r() test](https://i.stack.imgur.com/02GqR.png)