From ecd16166cde1ffa3edfbaa897b049d532e234ab6 Mon Sep 17 00:00:00 2001 From: Pixel Date: Wed, 2 May 2001 22:14:21 +0000 Subject: Pouet --- lib/polynom.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'lib/polynom.c') diff --git a/lib/polynom.c b/lib/polynom.c index b502849..e2e88d3 100644 --- a/lib/polynom.c +++ b/lib/polynom.c @@ -19,6 +19,7 @@ int smartprint = 1; +/* Les fonctions de base pour la construction et la destruction de polynomes */ polynome ply_constr(rationnel coef, int degre) { /* constructeur monome */ polynome temp; @@ -69,7 +70,9 @@ polynome ply_copy(polynome poly) } - +/* Voici toutes les fonctions de manipulation de polynôme. La fonction d'addition est la plus importante +puisqu'elle nous sert à construire un polynome entier à partir de monomes. Sa structure est comparable à celle +de l'opération 'fusion' dans le cas du tri fusion */ polynome ply_addition(polynome poly1, polynome poly2) { /* addition de deux polynomes */ @@ -129,6 +132,7 @@ polynome ply_addition(polynome poly1, polynome poly2) return resultat; } +/* Nous avons choisi de réécrire cette fonction entièrement, plutôt que de bricoler à partir de la fonction addition */ polynome ply_soustraction(polynome poly1, polynome poly2) { /* soustraction de deux polynomes */ @@ -188,7 +192,7 @@ polynome ply_soustraction(polynome poly1, polynome poly2) return resultat; } - +/* La fonction multiplication se base sur la fonction addition, suivant les mathématiques classiques */ polynome ply_multiplication(polynome poly1, polynome poly2) { /* multiplication de deux polynomes */ polynome temp = NULL, t, resultat = NULL, r, tempresult = NULL, poly2init; @@ -220,6 +224,11 @@ polynome ply_multiplication(polynome poly1, polynome poly2) return resultat; } + +/* L'algorithme pour la division et le modulo est le même. Seul le return change. En effet, pour faire le calcul, nous +utilisons la méthode simple vue en cours de mathématiques, qui consiste à poser la division sur une feuille et à effectuer +une série de multiplications élémentaires et de soustractions. Nous obtenons donc le quotient ET le reste. */ + 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; @@ -323,12 +332,12 @@ polynome ply_exposant(polynome poly, unsigned int exp) } -double ply_valuation(polynome poly, double point) -{ /* valuation d'un polynome en un point */ - double result = 0; +rationnel ply_valuation(polynome poly, rationnel point) +{ /* évaluation d'un polynome en un point */ + rationnel result = rat_constr_zero(); while (poly) { - result += rat_to_double(poly->coef) * pow(point, (poly->degre)); + result = rat_addition(result, rat_multiplication(poly->coef, rat_pow(point, poly->degre))); poly = poly->suiv; } return result; -- cgit v1.2.3