C++:генерировать распределение по гауссу
-
12-09-2019 - |
Вопрос
Я хотел бы знать, есть ли в стандартных библиотеках C ++ какие-либо распределение по Гауссу генератор чисел, или если у вас есть какой-либо фрагмент кода для передачи.
Заранее благодарю.
Решение
Стандартная библиотека этого не делает.Повышение.Однако случайное имеет значение.Я бы на твоем месте воспользовался этим.
Другие советы
Технический отчет C ++ 1 добавляет поддержку генерации случайных чисел.Так что, если вы используете относительно новый компилятор (visual c ++ 2008 GCC 4.3), скорее всего, он доступен "из коробки".
Видишь здесь для примера использования std::tr1::normal_distribution
(и многое другое).
В научных библиотеках GNU есть эта функция. GSL - Гауссово распределение
Ответ на этот вопрос меняется с C ++ 11, который имеет случайный заголовок который включает в себя std::нормальное распределение.Статья Уолтера Брауна N3551, Генерация случайных чисел в C ++ 11 вероятно, это одно из лучших введений в эту библиотеку.
Следующий код демонстрирует, как использовать этот заголовок (посмотрите это вживую):
#include <iostream>
#include <iomanip>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
std::normal_distribution<> dist(2, 2);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::floor(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
Я привожу более общий набор примеров для генерации случайных чисел в C ++ 11 в своем ответе на Генерация случайных чисел с плавающей точкой на C ++ с примером в Boost и использованием rand()
также.