summaryrefslogtreecommitdiff
path: root/lib/scalaires.c
diff options
context:
space:
mode:
authorPixel <Pixel>2001-05-03 00:20:43 +0000
committerPixel <Pixel>2001-05-03 00:20:43 +0000
commit6e5f6775d16e9730ccf1edbecf14da52d0ef134a (patch)
treea10da767d18359a1dcb1858391aa4c088b60f4c4 /lib/scalaires.c
parentf6a2189fb85618d50de1edee30536641b0c376cf (diff)
Indentation
Diffstat (limited to 'lib/scalaires.c')
-rw-r--r--lib/scalaires.c249
1 files changed, 142 insertions, 107 deletions
diff --git a/lib/scalaires.c b/lib/scalaires.c
index ee44304..857faab 100644
--- a/lib/scalaires.c
+++ b/lib/scalaires.c
@@ -13,171 +13,206 @@
#define _(x) x
#endif
-/* Cette précision est utilisée dans le cas où nous devons convertir un double en rationnel */
+/*
+ * Cette precision est utilisee dans le cas ou nous devons convertir un double en rationnel
+ */
#define PRECISION 1E6
typedisplay display;
-/* Fonction interne uniquement */
+/*
+ * Fonction interne uniquement
+ */
static unsigned long long pgcd(unsigned long long a, unsigned long long b)
{
- if (a < b)
- return pgcd(b, a);
- if (!b)
- return a;
- return pgcd(b, a % b);
+ if (a < b)
+ return pgcd(b, a);
+ if (!b)
+ return a;
+ return pgcd(b, a % b);
}
-/* Les quelques fonctions utiles à tout le monde... Juste pour éviter de taper du code en n exemplaire */
+/*
+ * Les quelques fonctions utiles a tout le monde... Juste pour eviter de taper du code en n
+ * exemplaire
+ */
rationnel rat_constr_zero(void)
-{ /* renvoie 0 */
- rationnel temp;
-
- temp.num = 0;
- temp.denom = 1;
- return temp;
+{ /*
+ * renvoie 0
+ */
+ rationnel temp;
+
+ temp.num = 0;
+ temp.denom = 1;
+ return temp;
}
-
rationnel rat_constr(unsigned long long num, unsigned long long denom)
-{ /* cree une fraction */
- rationnel temp;
- int sgnnum = 1, sgndenom = 1;
-
- if (num < 0) {
- sgnnum = -1;
- num = -num;
- }
-
- if (denom < 0) {
- sgndenom = -1;
- denom = -denom;
- }
- if (!num) {
- temp.num = 0;
- temp.denom = 1;
- } else if (denom) {
- temp.num = sgnnum * sgndenom * num / pgcd(num, denom);
- temp.denom = denom / pgcd(num, denom);
- } else {
- exception(2, _("rat_constr: division by zero"));
- }
- return temp;
+{ /*
+ * cree une fraction
+ */
+ rationnel temp;
+ int sgnnum = 1, sgndenom = 1;
+
+ if (num < 0) {
+ sgnnum = -1;
+ num = -num;
+ }
+
+ if (denom < 0) {
+ sgndenom = -1;
+ denom = -denom;
+ }
+ if (!num) {
+ temp.num = 0;
+ temp.denom = 1;
+ } else if (denom) {
+ temp.num = sgnnum * sgndenom * num / pgcd(num, denom);
+ temp.denom = denom / pgcd(num, denom);
+ } else {
+ exception(2, _("rat_constr: division by zero"));
+ }
+ return temp;
}
-/* Cette fonction est là pour faire beau. En fait, aucune routine ne l'utilise. Elle est écrite "au cas où" */
+/*
+ * Cette fonction est la pour faire beau. En fait, aucune routine ne l'utilise. Elle est ecrite "au
+ * cas ou"
+ */
rationnel rat_constr_from_double(double flt)
-{ /* cree une fraction a partir d un double */
- return rat_constr(floor(flt * PRECISION), PRECISION);
+{ /*
+ * cree une fraction a partir d un double
+ */
+ return rat_constr(floor(flt * PRECISION), PRECISION);
}
void rat_destruct(rationnel rat)
-{ /* destructeur */
+{ /*
+ * destructeur
+ */
}
double rat_to_double(rationnel rat)
-{ /* obtention du double correspondant a un rationnel */
- return ((double) rat.num / (double) rat.denom);
+{ /*
+ * obtention du double correspondant a un rationnel
+ */
+ return ((double) rat.num / (double) rat.denom);
}
rationnel rat_addition(rationnel rat1, rationnel rat2)
-{ /* addition */
+{ /*
+ * addition
+ */
- return rat_constr(rat1.num * rat2.denom + rat2.num * rat1.denom, rat1.denom * rat2.denom);
+ return rat_constr(rat1.num * rat2.denom + rat2.num * rat1.denom, rat1.denom * rat2.denom);
}
rationnel rat_soustraction(rationnel rat1, rationnel rat2)
-{ /* soustraction */
+{ /*
+ * soustraction
+ */
- return rat_constr(rat1.num * rat2.denom - rat2.num * rat1.denom, rat1.denom * rat2.denom);
+ return rat_constr(rat1.num * rat2.denom - rat2.num * rat1.denom, rat1.denom * rat2.denom);
}
rationnel rat_moinsunaire(rationnel rat1)
-{ /* moins unaire */
+{ /*
+ * moins unaire
+ */
- return rat_constr(-rat1.num, rat1.denom);
+ return rat_constr(-rat1.num, rat1.denom);
}
rationnel rat_multiplication(rationnel rat1, rationnel rat2)
-{ /* multiplication */
+{ /*
+ * multiplication
+ */
- return rat_constr(rat1.num * rat2.num, rat1.denom * rat2.denom);
+ return rat_constr(rat1.num * rat2.num, rat1.denom * rat2.denom);
}
rationnel rat_division(rationnel rat1, rationnel rat2)
-{ /* division */
- if (!rat2.num)
- exception(2,_("division by zero"));
- return rat_constr(rat1.num * rat2.denom, rat1.denom * rat2.num);
-
+{ /*
+ * division
+ */
+ if (!rat2.num)
+ exception(2, _("division by zero"));
+ return rat_constr(rat1.num * rat2.denom, rat1.denom * rat2.num);
+
}
-/* On choisit délibérément de faire une puissance 'lente' pour éviter de faire des overflow
-trop facilement */
+/*
+ * On choisit deliberement de faire une puissance 'lente' pour eviter 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;
+{ /*
+ * 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) */
+/*
+ * On convertit un rationnel en une chaine. Le booleen first indique si on le rationnel devra etre
+ * place en debut de chaine (pour les signes)
+ */
char *rat_to_string(rationnel rat, int first)
{
- static char resultat[128];
- char temp[64];
-
- resultat[0] = '\0';
-
- if (rat.num<0) {
- rat.num=-rat.num;
- if (first) {
- strcat(resultat,"-");
- } else {
- strcat(resultat,"- ");
- }
+ static char resultat[128];
+ char temp[64];
+
+ resultat[0] = '\0';
+
+ if (rat.num < 0) {
+ rat.num = -rat.num;
+ if (first) {
+ strcat(resultat, "-");
} else {
- if (!first) {
- strcat(resultat,"+ ");
- }
+ strcat(resultat, "- ");
}
-
- switch(display) {
- case DEC:
- if (rat.denom==1)
- sprintf(temp,"%qd", rat.num);
- else
- sprintf(temp,"%qd/%qd", rat.num, rat.denom);
- break;
- case HEX:
- if (rat.denom==1)
- sprintf(temp,"0x%qx", rat.num);
- else
- sprintf(temp,"0x%qx/0x%qx", rat.num, rat.denom);
- break;
- case OCT:
- if (rat.denom==1)
- sprintf(temp,"0%qo", rat.num);
- else
- sprintf(temp,"0%qo/0%qo", rat.num, rat.denom);
- break;
- case FLT:
- sprintf(temp,"%g", rat_to_double(rat));
- break;
+ } else {
+ if (!first) {
+ strcat(resultat, "+ ");
}
-
- strcat(resultat, temp);
- return resultat;
+ }
+
+ switch (display) {
+ case DEC:
+ if (rat.denom == 1)
+ sprintf(temp, "%qd", rat.num);
+ else
+ sprintf(temp, "%qd/%qd", rat.num, rat.denom);
+ break;
+ case HEX:
+ if (rat.denom == 1)
+ sprintf(temp, "0x%qx", rat.num);
+ else
+ sprintf(temp, "0x%qx/0x%qx", rat.num, rat.denom);
+ break;
+ case OCT:
+ if (rat.denom == 1)
+ sprintf(temp, "0%qo", rat.num);
+ else
+ sprintf(temp, "0%qo/0%qo", rat.num, rat.denom);
+ break;
+ case FLT:
+ sprintf(temp, "%g", rat_to_double(rat));
+ break;
+ }
+
+ strcat(resultat, temp);
+ return resultat;
}