«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу генерировать равномерно распределенные случайные числа в определенном диапазоне в C++?

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

Опубликовано 21 декабря 2024 г.
Просматривать:975

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

Генерация единых случайных чисел во всем диапазоне

Вы ищете метод равномерной генерации случайных чисел в заданном диапазоне [мин, макс].

Недостатки rand

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

C 11 и генерация единого диапазона

В C 11 std::uniform_int_distribution предлагает решение, адаптированное к этой потребности :

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

Дополнительные возможности

Заголовок предоставляет обширный набор генераторов случайных чисел с различными распределениями, например как Бернулли, Пуассон и нормальный.

Контейнер Перетасовка

Чтобы перетасовать контейнер, используйте std::shuffle:

#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

Если использование компилятора C 11 невозможно рассмотрите Boost.Random, интерфейс которого аналогичен интерфейсу аналога C 11.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3