Да и нет!

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

Если нам нужны действительно «настоящие» случайные числа, то нужно специальное оборудование. Аппаратное обеспечение представляет собой просто систему, которая измеряет физические явления, такие как атмосферный шум, шум лавинного пробоя, шум транзистора, шум электромагнитных помех, а шум является очень случайным измерением. Компонентами, используемыми для этих показаний, являются конденсаторы, стабилитроны, транзисторы, датчики. Различные аналоговые показания выбираются из этого шума, дискретизируются и масштабируются в соответствии с требованием диапазона случайных чисел, а затем квантуются и оцифровываются (с использованием АЦП). Этот метод генерации случайных чисел называется Аппаратная генерация случайных чисел (HRNG).

Программный метод называется генератором псевдослучайных чисел (PRNG). Существуют различные методы генерации случайных чисел, самым старым из которых является линейный конгруэнтный генератор (LCG). Это алгоритм, который генерирует числа из разрывного линейного уравнения:

Начальное значение – Xn, которое является начальным значением, a – множитель, c – приращение и следующие числа в линейной последовательности. (X n+1) рассчитываются по приведенному выше уравнению. Например, если m=9, a=2 ,c=0 и seed =1, то генерируются следующие числа: 1, 2, 4, 8, 7, 5, 1.

Существуют и более новые методы, такие как ГПСЧ распределения вероятностей, ГПСЧ последовательности Вейля по среднему квадрату.

Спасибо!