Pregunta

Me gustaría saber si en C ++ bibliotecas estándar hay alguna distribución gaussiana generador de números, o si tiene cualquier fragmento de código para pasar.

Gracias de antemano.

¿Fue útil?

Solución

La librería estándar no lo hace. Boost.Random hace, sin embargo. Me gustaría usar que si yo fuera usted.

Otros consejos

Informe Técnico 1 C ++ añade soporte para la generación de números aleatorios. Así que si estás usando un compilador relativamente reciente (Visual C ++ 2008 GCC 4.3), lo más probable es que esté disponible fuera de la caja.

aquí de ejemplos de uso de std::tr1::normal_distribution (y muchos más).

Las Bibliotecas científicas GNU tiene esta característica. GSL - Distribución Gaussiana

La respuesta a esta pregunta cambia con C ++ 11 que tiene la de cabecera al azar que incluye std :: normal_distribution . El artículo de Walter Brown N3551, generación de números aleatorios en C ++ 11 es probablemente una de las mejores introducciones a esta biblioteca.

El código siguiente muestra cómo utilizar esta cabecera ( ver en directo ) :

#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';
    }
}

I proporcionar un conjunto más general de ejemplos para generación de números aleatorios en C ++ 11 en mi respuesta a C ++ flotador aleatorio de generación de números con un ejemplo en el Boost y usando rand() también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top