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

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

Опубликовано 23 ноября 2024 г.
Просматривать:225

How to Generate Normally Distributed Random Numbers in C/C   Without Boost?

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

Вопрос:

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

Ответ:

Преобразование Бокса-Мюллера

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

Математическая формула преобразования Бокса-Мюллера выглядит следующим образом:

x = sqrt(-2 * log(U1)) * cos(2 * π * U2)
y = sqrt(-2 * log(U1)) * sin(2 * π * U2)

где:

  • U1 и U2 — равномерно распределенные случайные числа от 0 до 1
  • x и y — это нормально распределенные случайные числа со средним значением 0 и стандартным отклонением. 1

Реализация:

Чтобы реализовать преобразование Бокса-Мюллера в C/C, вы можете использовать следующий код:

#include 
#include 

double box_muller() {
  std::random_device rd;  // Seed the random number generator with a system clock seed
  std::default_random_engine rng(rd());
  std::uniform_real_distribution dist(0.0, 1.0);

  double U1 = dist(rng);
  double U2 = dist(rng);

  double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2);
  return x;
}

Использование:

Чтобы сгенерировать нормально распределенное случайное число, просто вызовите функцию box_muller():

double random_number = box_muller();

Значение random_number будет случайной величиной с распределением по Гауссу со средним значением 0 и стандартным отклонением. 1.

Примечание:

  • Преобразование Бокса-Мюллера также дает второй результат, y, но его можно отбросить или сохранить для дальнейшего использования.
  • Если вам нужно сгенерировать нормально распределенные числа со средним значением, отличным от 0, или стандартным отклонением, отличным от 1, вы можете умножить результат на постоянный.
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3