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();
 }