diff --git a/main.ml b/main.ml
index 2177ea360178962916691024a7cfb001763c3dc5..d90c16df634e07a627ce27e7c7f20022da829553 100644
--- a/main.ml
+++ b/main.ml
@@ -18,7 +18,7 @@ print_string "P1 = ";
 print_string (P.print p1);
 print_string "\n";;
 
-let p2 = P.generate 5;;
+let p2 = P.generate 4;;
 
 print_string "P2 = ";
 print_string (P.print p2);
diff --git a/polynome.ml b/polynome.ml
index 56f05c40edcd67dd5677306d949481479307830b..7360ba4a65988785bf93d87b6b0c56dd0e6c16b0 100644
--- a/polynome.ml
+++ b/polynome.ml
@@ -31,6 +31,7 @@ module type Degree =
     val is_bigger: degree -> degree -> bool
     val is_null: degree -> bool
     val increment: degree -> degree
+    val double: degree -> degree
     val unit: degree
   end
 ;;
@@ -52,10 +53,12 @@ module Polynome (C : Coefficient) (D : Degree) =
     type polynome =
       |Null
       |NotNull of C.coeff*D.degree*polynome
+
     let rec print p = match p with
       |Null -> "0"
       |NotNull (cc, dd, pp)->
 	      (C.print cc)^"X^"^(D.print dd)^"+"^(print pp)
+
     let rec equal x y = match x with
       |Null -> (match y with
 	      |Null -> true
@@ -72,33 +75,33 @@ module Polynome (C : Coefficient) (D : Degree) =
             else false
           )
     (*addition de deux polynomes*)
-    let rec add x y = match x with
-      |Null -> y
-      |NotNull (cx, dx, xx)->
-        (match y with
-	        |Null -> x
-	        |NotNull (cy, dy, yy)->
-	          if D.is_bigger dy dx
+    let rec add x y = match x, y with
+      |Null,_ -> y
+      |_, Null -> x
+      |NotNull (cx, dx, xx), NotNull (cy, dy, yy)->
+	        if D.is_bigger dy dx
 	          then NotNull (cy, dy, add x yy)
-	          else
+	        else
 	          if D.is_bigger dx dy
-	          then NotNull (cx, dx, add xx yy)
+	            then NotNull (cx, dx, add xx yy)
 	          else
-	          let m = C.add cx cy in
-	          if C.is_null m
-	          then add xx yy
-	          else NotNull (m, dx, add xx yy)
-	      )
+	            let m = C.add cx cy in
+	              if C.is_null m
+	                then add xx yy
+	              else NotNull (m, dx, add xx yy)
+
     (*fonction privée pour incrémenter les degrees des monomes d'un polynome*)
     let rec increment_degree d x = match x with 
       |Null -> Null
       |NotNull (cx, dx, xx)-> NotNull (cx, (D.add d dx), (increment_degree d xx))
-      (*fonction privée pour multiplier les coefficients d'un polynome*)
+
+    (*fonction privée pour multiplier les coefficients d'un polynome*)
     let rec multiply_coeffs c x = match x with 
       |Null -> Null
       |NotNull (cx, dx, xx) -> 
           if C.is_null c then Null
           else NotNull ((C.mul c cx), dx, (multiply_coeffs c xx))
+
     (*Naive multiplication de deux polynomes*)
     let rec naive_mul x y = match x, y with
       |Null, _ -> Null
@@ -112,6 +115,7 @@ module Polynome (C : Coefficient) (D : Degree) =
         |Null -> Null
         |NotNull (cp, dp, pp) -> NotNull (C.minus cp, dp, minus pp) 
       in add x (minus y) 
+
     (*fonction privée pour couper un polynome selon un degree*)
     (*polynome -> degree -> degree *)
     let cut x n = 
@@ -132,6 +136,7 @@ module Polynome (C : Coefficient) (D : Degree) =
     let cut_2 x = match x with 
       |Null-> Null, Null
       |NotNull (cx, dx, xx) -> cut x (D.div dx 2)
+
     (*multiplication de Karatsuba offman *)
     let rec karatsuba_mul x y = match x, y with
       |Null,_ -> Null
@@ -147,7 +152,8 @@ module Polynome (C : Coefficient) (D : Degree) =
             let xy1 = karatsuba_mul x1 y1 in
             let xy2 = karatsuba_mul x2 y2 in
             let xy3 = subtract (karatsuba_mul (add x1 y1) (add x2 y2)) (add xy1 xy2) in
-            add (add (increment_degree degree_max xy1) (increment_degree n xy3)) xy2
+            add (add (increment_degree (D.double n) xy1) (increment_degree n xy3)) xy2
+
     (*generate polynome from another polynome*)
     let generate n = 
       let rec gen acc count = 
diff --git a/simplepolynome.ml b/simplepolynome.ml
index 4d311389d672ee28abc76f23b35e5c34ad414d98..8fa34a4ec8fb8377419963a2030b101aa32bef35 100644
--- a/simplepolynome.ml
+++ b/simplepolynome.ml
@@ -17,6 +17,7 @@ module SimpleDegree =
     let is_null d = (d == 0)
     let unit = 1
     let increment d = d+1
+    let double d = d*2
   end
 ;;