diff --git a/PM.cpp b/PM.cpp index 4881b418322d49b0987fc38d2b06bcf505d81283..f5b24b14359a4b930e0e25ea8d627b134abce746 100644 --- a/PM.cpp +++ b/PM.cpp @@ -2,6 +2,9 @@ int main(int argc, char **argv) { int nRNG, nCuts; + std::ofstream rescsv; + rescsv.open("gva_res.csv"); + if(argc <2){ printf("Please give the number of random generated number \n"); return -1; @@ -13,14 +16,20 @@ int main(int argc, char **argv) { else nCuts = atoi(argv[2]); - long unif[nRNG]; - // create the outputs - for (int i = 0; i < nRNG; i++) - unif[i] = uniform(); - - // store hist freqs + long unif; int freqs[nCuts]; + // initialize frequences for(int i=0; i < nCuts; i ++) - freqs[i] = 0; - store_res(unif, freqs, nRNG, nCuts); + freqs[i] = 0; + + for (int i = 0; i < nRNG; i++){ + // create the outputs + unif = uniform(); + // store hist freqs + freqs[unif%nCuts] ++; + rescsv << unif; + rescsv << "\n"; + } + store_freqs(freqs, nCuts); + rescsv.close(); } diff --git a/fcts.h b/fcts.h index c64354f1e7fbe17dfbd199649a610e0743b02752..a552c807026bb915765062225d426a64f9b9801a 100644 --- a/fcts.h +++ b/fcts.h @@ -10,39 +10,52 @@ static long seed = 0xAAAA; long uniform() { long unsigned int hi = m * (seed & n); long unsigned int lo = m * (seed >> 16); - + lo+= (hi & 0x7FFF) << 16; lo+= hi >> 15; - + if (lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF; seed=(long) lo; return seed ; } -//void gaussian(){ -// Y0 = sqrt(-2* log(U0))*cos(2* pi * U1); -// Y1 = sqrt(-2* log(U0))*sin(2* pi * U1); - -//} +void gaussian(double U0, double U1, double res[2]){ + res[0] = sqrt(-2 * log(U0)) * cos(2 * M_PI * U1); + res[1] = sqrt(-2 * log(U0)) * sin(2 * M_PI * U1); +} -void store_res(long * res, int freqs[], int nRNG, int nCuts){ +void store_freqs(int freqs[], int nCuts){ + std::ofstream freqcsv; + freqcsv.open("gva_freqs.csv"); + int i; + for (i=0; i < nCuts; i++){ + freqcsv << (double) i / nCuts; + freqcsv << "-"; + freqcsv << (double) (i+1) / nCuts; + freqcsv << ", "; + freqcsv << freqs[i]; + freqcsv << "\n"; + } + freqcsv << "1.0, 0"; + freqcsv.close(); +} +void store_res_double(double * res, int freqs[], int nRNG, int nCuts){ std::ofstream myfile, freqcsv; myfile.open("gva_res.csv"); freqcsv.open("gva_freqs.csv"); int i; for (i = 0; i < nRNG; i ++){ - freqs[res[i]%nCuts] ++; + // freqs[res[i]%nCuts] ++; myfile << res[i]; myfile << "\n"; } - for (i=0; i < nCuts; i++){ - freqcsv << "0."; - freqcsv << i; - freqcsv << ", "; - freqcsv << freqs[i]; - freqcsv << "\n"; - } - freqcsv << "1.0, 0"; + // for (i=0; i < nCuts; i++){ + // freqcsv << (double) i / nCuts; + // freqcsv << ", "; + // freqcsv << freqs[i]; + // freqcsv << "\n"; + // } + // freqcsv << "1.0, 0"; myfile.close(); freqcsv.close(); }