Domanda

Vorrei sapere se in C ++ librerie standard non v'è alcun distribuzione gaussiana generatore di numeri, o se avete qualsiasi frammento di codice per passare.

Grazie in anticipo.

È stato utile?

Soluzione

La libreria standard non lo fa. Boost.Random fa, però. Userei che se fossi in te.

Altri suggerimenti

Rapporto C ++ tecnico 1 aggiunge il supporto per la generazione di numeri casuali. Quindi, se si sta utilizzando un relativamente recente compilatore (Visual C ++ 2008 GCC 4.3), è probabile che sia disponibile out of the box.

qui per l'utilizzo campione di std::tr1::normal_distribution (e molti altri).

I GNU scientifici Biblioteche ha questa caratteristica. GSL - Distribuzione gaussiana

La risposta a questa domanda cambia con C ++ 11 che ha la intestazione casuale , che include std :: normal_distribution . L'articolo di Walter Brown N3551, generazione di numeri casuali in C ++ 11 è probabilmente una delle introduzioni migliori per questa libreria.

Il codice di seguito viene illustrato come utilizzare questa intestazione ( vederla dal vivo ) :

#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 fornire un insieme più generale di esempi per la generazione di numeri casuali in C ++ 11 nella mia risposta alla C ++ float generazione di numeri casuali con un esempio in Boost e utilizzando rand() pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top