diff options
author | biouman <biouman> | 2001-04-27 04:12:25 +0000 |
---|---|---|
committer | biouman <biouman> | 2001-04-27 04:12:25 +0000 |
commit | 4db12b8121c0b32df8b8671045013c857beb191f (patch) | |
tree | 15489f56132610576bd5cd860d38d8b759f64482 /scalaires.c |
Diffstat (limited to 'scalaires.c')
-rw-r--r-- | scalaires.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/scalaires.c b/scalaires.c new file mode 100644 index 0000000..71a106d --- /dev/null +++ b/scalaires.c @@ -0,0 +1,95 @@ +/* + * + * Operations sur les scalaires ( rationnels ) + * + */ + +#include "scalaires.h" +#include <math.h> + +#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); +} |