Найти в Дзене

069 Псевдослучайные и случайные числа

Псевдослучайные числа "Все, кто не верит в случайные числа, питают слабость к арифметическим методам. Любой генератор псевдослучайных чисел с ограниченными ресурсами рано или поздно зациклится и начнет повторять одну и ту же последовательность чисел." — Джон фон Нейман В Go стандартная библиотека предоставляет пакет "math/rand", который реализует генератор псевдослучайных чисел (ГПСЧ) на основе алгоритма, известного как "твистер Мерсенна". Этот алгоритм генерирует последовательность 32-битных целых чисел, обладающих хорошими статистическими свойствами и очень большим периодом (2^19937-1). Чтобы использовать ГПСЧ, сначала нужно создать новый экземпляр генератора, вызвав функцию NewSource(), которая принимает значение int64 в качестве seed. Значение seed определяет начальную точку последовательности, поэтому если вы используете одно и то же значение seed, то каждый раз будете получать одну и ту же последовательность случайных чисел. Если вам нужны разные последовательности, вы можете ис
Оглавление

Псевдослучайные числа

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

— Джон фон Нейман

В Go стандартная библиотека предоставляет пакет "math/rand", который реализует генератор псевдослучайных чисел (ГПСЧ) на основе алгоритма, известного как "твистер Мерсенна". Этот алгоритм генерирует последовательность 32-битных целых чисел, обладающих хорошими статистическими свойствами и очень большим периодом (2^19937-1).

Чтобы использовать ГПСЧ, сначала нужно создать новый экземпляр генератора, вызвав функцию NewSource(), которая принимает значение int64 в качестве seed. Значение seed определяет начальную точку последовательности, поэтому если вы используете одно и то же значение seed, то каждый раз будете получать одну и ту же последовательность случайных чисел. Если вам нужны разные последовательности, вы можете использовать другое значение seed.

Вот пример фрагмента кода, который генерирует последовательность из 10 случайных целых чисел от 0 до 99:

Go Playground - The Go Programming Language

В этом примере мы используем текущее время в качестве затравки, что должно давать нам разные последовательности случайных чисел при каждом запуске программы. Метод Intn() возвращает случайное целое число от 0 до n-1, где n — аргумент, переданный функции. В данном случае мы передаем 100, поэтому получаем случайные целые числа от 0 до 99.

Случайные числа

"Пифагорейцы утверждают, что миром и всем, что в нем есть, правит число три."

— Аристотель

Генерация действительно случайных чисел — сложная задача, но существует несколько методов, которые можно использовать для их генерации. Вот несколько примеров:

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

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

Методы выборки: Методы выборки предполагают выбор случайных данных из большого массива данных. Например, атмосферный шум или радиопомехи могут быть отобраны для генерации случайных чисел.

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

Стоит отметить, что истинно случайные числа не являются детерминированными, то есть их нельзя предсказать или воспроизвести. В отличие от них, генераторы псевдослучайных чисел (ГПСЧ) генерируют последовательность чисел, которая кажется случайной, но на самом деле определяется алгоритмом или формулой. Хотя ГПСЧ могут быть полезны во многих приложениях, их не следует использовать в ситуациях, когда требуется истинная случайность, например, в криптографии или азартных играх.