0Pricing
C++ Academy · Урок

Случайные числа с заголовком random

Генерируйте качественные случайные числа с помощью современных генераторов и распределений.

«Случайные числа с заголовком random» — бесплатный урок C++ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Почему не rand()?

Устаревшая функция C std::rand() использует глобальное состояние, обладает низким качеством с точки зрения статистики и небезопасна для потоков. Современный C++ предоставляет гораздо более качественные средства в <random>.

Рецепт из трёх частей

Генерация случайных чисел в современном C++ состоит из трёх компонентов:

  • источник начального значения (настоящая энтропия)
  • движок-генератор (детерминированное состояние)
  • распределение (формирует выходные данные)

Инициализация с помощью random_device

std::random_device получает настоящую энтропию из OS, но это может быть медленно. Используйте его один раз для инициализации быстрого движка.

#include <random>
std::random_device rd;
std::mt19937 engine(rd());

Движок mt19937

std::mt19937 (вихрь Мерсенна) — быстрый генератор псевдослучайных чисел с отличными статистическими свойствами. Это выбор по умолчанию для большинства приложений.

Равномерное распределение целых чисел

Создаёт целые числа, равномерно распределённые в замкнутом диапазоне.

std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);

Равномерное распределение вещественных чисел

Используется для чисел с плавающей точкой в полуоткрытом диапазоне [a, b).

std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);

Нормальное (гауссово) распределение

Используется для случайных чисел с колоколообразным распределением — это часто требуется в моделировании и машинном обучении.

std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);

Другие распределения

Библиотека включает множество других распределений: bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution и другие.

Воспроизводимая случайность

При тестировании используйте фиксированное начальное значение, чтобы при каждом запуске получать одну и ту же последовательность.

std::mt19937 engine(42);
// Same output every time you run the program

Случайное перемешивание

Перемешайте контейнер с помощью std::shuffle, которому подходит любой движок.

#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);

Подводный камень: повторная инициализация в цикле

Не создавайте новый random_device или движок для каждого случайного числа. Создайте один движок и используйте его повторно во всех вызовах.

Быстрая проверка

Как в современном C++ безопаснее всего инициализировать движок псевдослучайных чисел?

Итоги

В современном C++ для инициализации используется random_device, в качестве движка — mt19937, а для формирования выходных данных — распределение, например uniform_int_distribution. Используйте движок повторно — никогда не создавайте новый при каждом вызове.

Часто задаваемые вопросы

Урок «Случайные числа с заголовком random» бесплатный?

Да — полный текст урока «Случайные числа с заголовком random» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Случайные числа с заголовком random»?

Генерируйте качественные случайные числа с помощью современных генераторов и распределений. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Случайные числа с заголовком random»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Целочисленные типы и типы с плавающей точкой
  2. Заголовок cmath: pow, sqrt, abs, round
  3. Случайные числа с заголовком random
  4. Числовые ограничения и переполнение
← Назад к C++ Academy