void marsaglia() { using namespace std; gROOT->Reset(); TFile* f = (TFile*)gROOT->FindObject("marsaglia.root"); if (f) f->Close(); f = new TFile ("marsaglia.root","RECREATE",""); TTree * t = new TTree("t", "Nuovo Tree"); int a = 16807; int m = 2147483647; int c=0; //generatore di tipo moltiplicativo int Nmax=10000; int z, i; double PI = 3.141592653; double u, u0, y, rsq, mar; t->Branch("Marsaglia", &mar, "mar/D"); int z0 = 12; //seme for(i=0; i< Nmax; i++){ z = (a*z0 +c) % m ; u = (double)z/(double)m; u0 = (double)z0/(double)m; rsq = u*u + u0*u0; if(rsq <= 1){ mar = sqrt(-2*log(rsq)/rsq)*u; t->Fill(); } z0 = z; } f->cd(); t->Write(); f->Close(); }