summaryrefslogtreecommitdiff
path: root/scalaires.c
diff options
context:
space:
mode:
Diffstat (limited to 'scalaires.c')
-rw-r--r--scalaires.c95
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);
+}