Вопрос

Я хотел бы знать, есть ли в стандартных библиотеках 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() также.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top