diff --git a/polynome.ml b/polynome.ml
index fea7a65916279ed44c6844bc53fe939634075db9..75e72587b6eec949d57701b91d9b71ccacd0830e 100644
--- a/polynome.ml
+++ b/polynome.ml
@@ -157,9 +157,13 @@ module Polynome (C : Coefficient) (D : Degree) =
             let n = D.div degree_max 2 in
             let x1, x2 = cut x n in
             let y1, y2 = cut y n in
-            let xy1 = naive_mul x1 y1 in
-            let xy2 = naive_mul x2 y2 in
-            let xy3 = sub (naive_mul (add x1 y1) (add x2 y2)) (add xy1 xy2) in
+            let xy1 = karatsuba_mul x1 y1 in
+            let xy2 = karatsuba_mul x2 y2 in
+            let s1 = add x1 y1 in
+            let s2 = add x2 y2 in
+            let s3 = add xy1 xy2 in
+            let k_ss = karatsuba_mul s1 s2 in
+            let xy3 = sub k_ss s3 in
             add xy2 (add (increment_degree (D.double n) xy1) (increment_degree n xy3)) 
 
     (*generate polynome from another polynome*)