Что такое псевдослучайное целое число? - PullRequest
3 голосов
/ 06 марта 2011

Я читаю С книгу. В описании функции rand() говорится:

rand возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX. RAND_MAX зависит от реализации, но не менее 32767.

Я не понимаю; что такое "псевдослучайное целое число"?

Спасибо.

Ответы [ 6 ]

7 голосов
/ 06 марта 2011

Неформально, псевдослучайное число - это число, которое не является действительно случайным, но является «достаточно случайным» для большинства целей.

Компьютеры по своей природе являются детерминированными устройствами.Процессор выполняет определенные команды в определенном порядке, и программы контролируют, как процессор делает это.Следовательно, программам сложно генерировать случайные числа, потому что никакой детерминированный процесс не может создать случайное число.Таким образом, многие программы используют генератор псевдослучайных чисел , который представляет собой функцию, которая генерирует числа согласно некоторой детерминированной формуле, которые кажутся случайными, но на самом деле это не так.Большинство языков программирования предоставляют своего рода генератор псевдослучайных чисел для общего использования в программировании, и когда истинная случайность не нужна, они работают просто отлично.

Однако у них есть свои ограничения.В криптографических настройках во многих случаях требуется истинная случайность, чтобы, например, не дать злоумышленникам угадать работу системы и скомпрометировать ее.В этом случае можно получить действительно случайные числа с помощью специализированного оборудования, которое может усилить фоновый шум или использовать квантовые эффекты.Этот тип случайности чрезвычайно трудно генерировать, и поэтому он обычно не используется, если не требуется абсолютная непредсказуемость.

3 голосов
/ 06 марта 2011

Из записи вики: Генератор псевдослучайных чисел

Генератор псевдослучайных чисел (PRNG), также известный как генератор детерминированных случайных битов (DRBG), представляет собой алгоритм для генерации последовательность чисел, которая приближает свойства случайных чисел .

Другими словами, она приблизительно случайная (в известной степени), но не является действительно случайной в смысле случайнойшум от физического источника.

2 голосов
/ 06 марта 2011

Чтобы добавить педантизм в другие правильные ответы, которые вы уже получили, на самом деле не существует такого понятия, как «псевдослучайное целое число» (или, в этом отношении, случайное целое число).Вот то, что Джон фон Нейман делал в своей знаменитой цитате (которая обычно вводит в заблуждение сокращенно только до первого предложения):

"Любой, кто рассматривает арифметические методысоздание случайных цифр, конечно, находится в состоянии греха, поскольку, как уже было отмечено несколько раз, не существует такой вещи, как случайное число - есть только методы для получения случайных чисел и, конечно, строгая арифметическая процедура.это не такой метод "

Рассмотрим число 7. Это случайное целое число?Если это так, это псевдослучайное целое число или истинное случайное целое число?Как насчет числа -10?Очевидно, что эти вопросы не имеют смысла ( обязательная ссылка на xkcd 221 ).

Итак, как уже отмечали другие, на самом деле книга означает, что число генерируется псевдослучайным(то есть детерминированный) генератор чисел, в отличие от того, чтобы быть полученным из действительно случайной последовательности.Существует несколько различных алгоритмов генерации псевдослучайных чисел, и лучшие из них генерируют выходные данные, которые статистически неотличимы от истинной случайной последовательности.

2 голосов
/ 06 марта 2011

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

Как наблюдать разницу во времени при нажатии клавиш, а затем использовать ее как просто вход для расчета числа. Такие вещи в сочетании с несколькими другими входами имеют тенденцию давать случайные числа, но в действительности это просто алгоритм, который имеет тенденцию давать случайные числа. Если совпадают одинаковые условия, ему будет присвоено одинаковое число.

0 голосов
/ 06 марта 2011

Это означает, что он генерирует числовую последовательность, которая демонстрирует свойства случайного числа с точки зрения распределения, но которая математически генерируется и детерминируется в своем выводе для любого конкретного seed value.

Вы можете убедиться в этом, создав программу, которая использует такую ​​функцию для генерации короткой последовательности, и наблюдая, что при каждом ее запуске она генерирует одну и ту же последовательность.Эта опция удивляет ничего не подозревающих, но также является весьма полезным свойством при тестировании кода.Когда требуется менее предсказуемая последовательность, обычно инициализируют PRNG значением seed , которое само по себе является непредсказуемым, часто полученным из текущего системного времени, поскольку оно обычно не предсказуемо при запуске программы.

Генераторы псевдослучайных чисел обычно не подходят для приложений безопасности, таких как шифрование данных или азартные игры в Интернете, где их предельная предсказуемость может быть серьезным недостатком.

0 голосов
/ 06 марта 2011

В большинстве компьютеров случайное число считается псевдослучайным, потому что оно не является полностью случайным.

pseudo = fake

В основном, текущее время используется для генерации случайного числа, поэтому оноМожно предсказать, какое число будет сгенерировано изначально, и для большинства приложений это нормально.

...