From 22a4fa35ca3845c130c49406ae342bbcb60ada55 Mon Sep 17 00:00:00 2001 From: Pixel Date: Wed, 2 May 2001 11:21:03 +0000 Subject: Pouet --- lib/polynom.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/polynom.c') diff --git a/lib/polynom.c b/lib/polynom.c index ff92e5d..8cdac59 100644 --- a/lib/polynom.c +++ b/lib/polynom.c @@ -223,6 +223,7 @@ polynome ply_multiplication(polynome poly1, polynome poly2) polynome ply_division(polynome dividende, polynome diviseur) { /* division de deux polynomes */ polynome interdividende = ply_copy(dividende), interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; + int b = 0; #ifdef DEBUG printf("On divise %s", ply_affichage(dividende)); @@ -231,6 +232,7 @@ polynome ply_division(polynome dividende, polynome diviseur) printf("diviseur degre = %u\n", diviseur->degre); #endif while ((interdividende) && (interdividende->degre >= diviseur->degre)) { + b = 1; inter = ply_constr(rat_division(interdividende->coef, diviseur->coef), interdividende->degre - diviseur->degre); #ifdef DEBUG printf("On trouve qu'il nous faut soustraire %s fois\n", ply_affichage(inter)); @@ -254,6 +256,8 @@ polynome ply_division(polynome dividende, polynome diviseur) resultat = r; interdividende = reste; } + + if (!b) ply_destruct(interdividende); return resultat; } @@ -261,6 +265,7 @@ polynome ply_division(polynome dividende, polynome diviseur) polynome ply_modulo(polynome dividende, polynome diviseur) { /* reste de la division de deux polynomes */ polynome interdividende = ply_copy(dividende), interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; + int b; #ifdef DEBUG printf("On divise %s", ply_affichage(dividende)); @@ -269,6 +274,7 @@ polynome ply_modulo(polynome dividende, polynome diviseur) printf("diviseur degre = %u\n", diviseur->degre); #endif while ((interdividende) && (interdividende->degre >= diviseur->degre)) { + b = 1; inter = ply_constr(rat_division(interdividende->coef, diviseur->coef), interdividende->degre - diviseur->degre); #ifdef DEBUG printf("On trouve qu'il nous faut soustraire %s fois\n", ply_affichage(inter)); @@ -293,7 +299,9 @@ polynome ply_modulo(polynome dividende, polynome diviseur) interdividende = reste; } - return reste; + if (!b) ply_destruct(interdividende); + + return b ? reste : ply_copy(reste); } polynome ply_exposant(polynome poly, unsigned int exp) -- cgit v1.2.3