Ciao a tutti,
ho generato in C++ una sequenza di numeri con distribuzione gaussiana (o Normale, che dir si voglia), con media e deviazione standard parametrizzabili.
Tuttavia si tratta di una soluzione che ho trovato sul web, per cui, anche se funziona bene, vorrei cercar di capire cosa fa in maniera più approfondita. Conosco bene il C, e mi sto cimentando da poco nel C++, e non vi nascondo che a volte l'argomento "classi" mi crea qualche dubbio.
Vi riporto qui sotto il piccolo main() che risolve il mio problema.
#include <iostream>
#include <random>
using namespace std;
int main()
{
long int num_generati=1000;
double media=5.0;
double dev_std=2.0;
default_random_engine generator;
normal_distribution <double> distribution(media,dev_std);
for (int i=0; i<num_generati; i++)
cout << distribution(generator) << endl;
return 0;
}
Vi scrivo quello che ho capito, e i miei dubbi, chiedendovi gentilmente di correggermi se dico strafalcioni (sicuramente qualcuno lo dirò, altrimenti mi sarebbe tutto chiaro).
1)default_random_engine è una classe della libreria std, per cui nel codice ho creato un oggetto generator appartenente a questa classe.
2)normal_distribution è una classe template della libreria std, infatti ho specificato <double> per indicare che all'oggetto distribution che sto creando sto passando parametri (media e dev_std) di tipo double, e i numeri della distribuzione che genererò saranno in formato double.
E' giusto quindi dire che normal_distribution <double> distribution(media,dev_std); mi crea un oggetto chiamato distribution che potrà generarmi una gaussiana secondo i parametri media e dev_std che gli ho passato?
3)non capisco cosa significa: distribution(generator). Ovvero: forse all'oggetto distribution sto passando un oggetto generator? Perchè questa istruzione, messa nell'opportuno ciclo for e quindi ripetuta num_generati volte, mi genera la sequenza di numeri desiderata? A che cosa serve, in altre parole, il generator, e perchè viene passato tra parentesi?
Grazie mille a tutti
Paolo78