summaryrefslogtreecommitdiff
path: root/lib/scalaires.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scalaires.c')
-rw-r--r--lib/scalaires.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/scalaires.c b/lib/scalaires.c
index 5dd6bb1..eb7b7c6 100644
--- a/lib/scalaires.c
+++ b/lib/scalaires.c
@@ -13,9 +13,12 @@
#define _(x) x
#endif
+/* Cette précision est utilisée dans le cas où nous devons convertir un double en rationnel */
#define PRECISION 1E6
typedisplay display;
+/* Fonction interne uniquement */
+
static unsigned long long pgcd(unsigned long long a, unsigned long long b)
{
if (a < b)
@@ -113,6 +116,19 @@ rationnel rat_division(rationnel rat1, rationnel rat2)
}
+/* On choisit délibérément de faire une puissance 'lente' pour éviter de faire des overflow
+trop facilement */
+
+rationnel rat_pow(rationnel rat, unsigned int p)
+{ /* puissance */
+ for (; p; p--) {
+ rat = rat_multiplication(rat, rat);
+ }
+ return rat;
+}
+
+/* On convertit un rationnel en une chaîne. Le booléen first indique si on le rationnel devra être placé en début de chaîne (pour
+les signes) */
char *rat_to_string(rationnel rat, int first)
{