diff --git a/main.c b/main.c
index 80df2b973f58beb0a0eede4c27818bb1c5a0b3f2..bb2f35488a42e4da5103b8bf21398347de13b2d6 100644
--- a/main.c
+++ b/main.c
@@ -16,24 +16,32 @@ int main() {
 
     srand(time(0));
 
-    int N = NB_G * 200;
+    // NB_G = Nombre de groupe
+    int N = NB_G * 3000;
     vec *points = malloc(sizeof(vec) * N);
 
+    // Génération de la fonction linéaire
     double c = randNum(), d = randNum();
-    double r;
-    
+
+    double r, amp = 10.0;
+
     for (int i = 0; i < N; i++) {
         vec tmp;
+
+        // Préimage aléatoire
         tmp.x = randNum();
 
-        r = randNum() / 10.0;
+        r = randNum() / amp - 1 / (2 * amp);
 
+        // Image de tmp.x avec le décalage r
         tmp.y = c * tmp.x + d + r;
         points[i] = tmp;
     }
 
+    // Génération des indexes aléatoire pour remplir les groupes
     int *rnd_indexes = rand_order_indexes(N);
 
+    // Répartion aléatoire des points grâce aux indexes aléatoire
     vec **groups = cut_table(rnd_indexes, N, points);
 
     vec *ab = malloc(sizeof(vec) * NB_G);
@@ -41,6 +49,9 @@ int main() {
         ab[i].x = randNum();
         ab[i].y = randNum();
 
+        /* other = l'autre groupe modèle
+         * to_test = le groupe test
+         */
         int other = i + 1, to_test = i - 1;
         if (other >= NB_G) {
             other = 0;
@@ -48,27 +59,35 @@ int main() {
             to_test = NB_G - 1;
         }
 
+        // Modèle
         minimiser(groups[i], groups[other], N / NB_G, 1e-6, &ab[i]);
         printf("model: a: %g, b: %g\n", ab[i].x, ab[i].y);
 
+        // Test
         vec test_ab;
-        calc_ab(groups[to_test], NB_G, &test_ab);
-        printf("test: a: %g, b: %g\n\n", test_ab.x, test_ab.y);
+        calc_ab(groups[to_test], N / NB_G, &test_ab);
+
+        printf("test: a: %g, b: %g\n", test_ab.x, test_ab.y);
+
+	    printf("Marge d'erreur: %g, %g\n\n", test_ab.x - ab[i].x, test_ab.y - ab[i].y);
     }
-    
-    //minimiser(points, N, 0.001, &ab);
-    printf("c: %g, d: %g\n", c, d);
 
+    printf("c: %g, d: %g\n", c, d); 
+
+    /* Écriture des groupes dans des fichiers texte */
     for (int i = 0; i < NB_G; i++) {
-        char fname[11];
+        char fname[10];
         sprintf(fname, "G%d.txt", i + 1);
         write_to_file(groups[i], N / NB_G, fname);
     }
 
+    // Écriture des a et b dans un fichier texte
     write_to_file(ab, NB_G, "ab.txt");
 
     system("python3 graph.py");
 
+
+    /* Free des tableaux */
     free(ab);
     free(points);
     free(rnd_indexes);
@@ -81,40 +100,45 @@ int main() {
     return EXIT_SUCCESS;
 }
 
+/* Génère un nombre aléatoire entre 0 et 1 */
 double randNum() {
     return rand() / (double)RAND_MAX;
 }
 
+/* Répartie N points, dans NB_G groupes avec des indexes données
+ * Retourne un tableau avec NB_G tableau de points
+ */
 vec **cut_table(int *rand_indexes, int N, vec *points) {
     vec **groups = malloc(sizeof(vec*) * NB_G);
 
     int frac = N / NB_G;
 
-    for (int i = 0; i < NB_G; i++) {
-        groups[i] = malloc(sizeof(vec) * frac);
-    }
-
     for (int i = 0; i < N; i++) {
+        if (i % frac == 0) {
+            groups[i / frac] = malloc(sizeof(vec) * frac);
+        }
         groups[i / frac][i % frac] = points[rand_indexes[i]];
     }
 
     return groups;
 }
 
+/* Génère un tableau d'indexes ordonés aléatoirement */
 int *rand_order_indexes(int N) {
     int *indexes = calloc(0, sizeof(int) * N);
 
     for (int i = 1; i < N; i++) {
-        int rnd_index = rand() % N;
-        while (indexes[rnd_index] != 0) {
+        int rnd_index;
+        do {
             rnd_index = rand() % N;
-        }
+        } while (indexes[rnd_index] != 0);
         indexes[rnd_index] = i;
     }
 
     return indexes;
 }
 
+/* Écrit un tableau de points dans un fichier */
 void write_to_file(vec *points, int N, char *filename) {
     FILE *fp = fopen(filename, "w");
 
diff --git a/opti_num.c b/opti_num.c
index a263a32761ad92cc4e54f8e6c9b895a0214ef3ba..0d7a1cf0a05113bc9a815253708015779be77dd4 100644
--- a/opti_num.c
+++ b/opti_num.c
@@ -6,6 +6,7 @@
 void minimiser(vec *vecs1, vec *vecs2, int N, double lambda, vec *ab) {
     double sum_x = 0, sum_xx = 0, sum_xy = 0, sum_y = 0;
     
+    /* Calculer les sommes */
     for (int i = 0; i < 2 * N; i++) {
         if (i < N) {
             sum_x += vecs1[i].x;
@@ -45,7 +46,7 @@ void calc_ab(vec *points, int N, vec *ab) {
         sum_y += points[i].y;
     }
 
-    ab->x = (sum_y * sum_x - N * sum_xy) / (sum_x * sum_x - N * sum_xx);
+    ab->x = (sum_x * sum_y - N * sum_xy) / (sum_x * sum_x - N * sum_xx);
 
-    ab->y = (sum_y - ab->x * sum_x) / N;
+    ab->y = (sum_xy - ab->x * sum_x) / N;
 }
\ No newline at end of file