summaryrefslogtreecommitdiff
path: root/lib/polynom.c
diff options
context:
space:
mode:
authorPixel <Pixel>2001-05-02 22:14:21 +0000
committerPixel <Pixel>2001-05-02 22:14:21 +0000
commitecd16166cde1ffa3edfbaa897b049d532e234ab6 (patch)
tree192b47251b141e0dd0f53530e3a4a2a5f961ea0f /lib/polynom.c
parent8626b278cdccd95e628f14c027ae8a1c47133c48 (diff)
Pouet
Diffstat (limited to 'lib/polynom.c')
-rw-r--r--lib/polynom.c21
1 files changed, 15 insertions, 6 deletions
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;