Skip to content
Extraits de code Groupes Projets
Valider de6321aa rédigé par EdouardParis's avatar EdouardParis
Parcourir les fichiers

some space

parent 909f31e6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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);
......
......@@ -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,12 +75,10 @@ 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)->
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
......@@ -88,17 +89,19 @@ module Polynome (C : Coefficient) (D : Degree) =
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*)
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 =
......
......@@ -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
;;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter