From 3b37a00a4be251f87e543d269489cb7a989425d5 Mon Sep 17 00:00:00 2001 From: Pixel Date: Sat, 28 Apr 2001 21:40:25 +0000 Subject: Hop, gros bordel, plein de fichiers ajoutes et supprimes :) --- lib/scalaires.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 lib/scalaires.c (limited to 'lib/scalaires.c') diff --git a/lib/scalaires.c b/lib/scalaires.c new file mode 100644 index 0000000..71a106d --- /dev/null +++ b/lib/scalaires.c @@ -0,0 +1,95 @@ +/* + * + * Operations sur les scalaires ( rationnels ) + * + */ + +#include "scalaires.h" +#include + +#define PRECISION 1E6 +static int pgcd(int a, int b) +{ + if (!a) + return b; + if (a < b) + return pgcd(b, a); + return pgcd(b, a % b); +} + +rationnel rat_constr_zero(void) +{ /* renvoie 0 */ + rationnel temp; + + temp.num = 0; + temp.denom = 1; + return temp; +} + + +rationnel rat_constr(int num, int denom) +{ /* cree une fraction */ + rationnel temp; + + if (denom < 0) { + denom = -denom; + num = -num; + } + + temp.num = num / pgcd(num, denom); + temp.denom = denom / pgcd(num, denom); + return temp; + +} + +rationnel rat_constr_from_double(double flt) +{ /* cree une fraction a partir d un double */ + + return rat_constr(floor(flt * PRECISION), PRECISION); + + +} + +void rat_destruct(rationnel rat) +{ /* destructeur */ + +} + +double rat_to_double(rationnel rat) +{ /* obtention du double correspondant a un rationnel */ + return ((double) rat.num / (double) rat.denom); +} + +rationnel rat_addition(rationnel rat1, rationnel rat2) +{ /* addition */ + + return rat_constr(rat1.num * rat2.denom + rat2.num * rat1.denom, rat1.denom * rat2.denom); + +} + +rationnel rat_soustraction(rationnel rat1, rationnel rat2) +{ /* soustraction */ + + return rat_constr(rat1.num * rat2.denom - rat2.num * rat1.denom, rat1.denom * rat2.denom); + +} + +rationnel rat_moinsunaire(rationnel rat1) +{ /* moins unaire */ + + return rat_constr(-rat1.num, rat1.denom); + +} + +rationnel rat_multiplication(rationnel rat1, rationnel rat2) +{ /* multiplication */ + + return rat_constr(rat1.num * rat2.num, rat1.denom * rat2.denom); + +} + +rationnel rat_division(rationnel rat1, rationnel rat2) +{ /* division */ + + return rat_constr(rat1.num * rat2.denom, rat1.denom * rat2.num); +} -- cgit v1.2.3