summaryrefslogtreecommitdiff
path: root/lib/scalaires.c
diff options
context:
space:
mode:
authorbiouman <biouman>2001-05-01 12:08:10 +0000
committerbiouman <biouman>2001-05-01 12:08:10 +0000
commit78dcc3729881bb6b3937da195bc070ca96cb049b (patch)
tree147429ecf5a9419745d5496cb011d0cc33a22532 /lib/scalaires.c
parent655f3b2663b9909656b896cf47ad949b4e9644a8 (diff)
*** empty log message ***
Diffstat (limited to 'lib/scalaires.c')
-rw-r--r--lib/scalaires.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/scalaires.c b/lib/scalaires.c
index ab97084..d2f24fb 100644
--- a/lib/scalaires.c
+++ b/lib/scalaires.c
@@ -12,8 +12,9 @@
#define _(x) x
#endif
-
#define PRECISION 1E6
+typedisplay display=DEC;
+
static int pgcd(int a, int b)
{
if (a < b)
@@ -54,7 +55,7 @@ rationnel rat_constr(int num, int denom)
temp.num = sgnnum * sgndenom * num / pgcd(num, denom);
temp.denom = denom / pgcd(num, denom);
} else {
- exception(1, _("rat_constr: division by zero"));
+ exception(2, _("rat_constr: division by zero"));
}
return temp;
@@ -113,3 +114,35 @@ rationnel rat_division(rationnel rat1, rationnel rat2)
return rat_constr(rat1.num * rat2.denom, rat1.denom * rat2.num);
}
+
+char *rat_to_string(rationnel rat)
+{
+ char resultat[128];
+ char temp[64];
+
+ if (rat.num<0) {
+ rat.num=-rat.num;
+ strcat(resultat,"-");
+ } else {
+ strcat(resultat,"+");
+ }
+
+ switch(display) {
+ case DEC:
+ sprintf(temp,"%d/%d", rat.num, rat.denom);
+ break;
+ case HEX:
+ sprintf(temp,"%x/%x", rat.num, rat.denom);
+ break;
+ case OCT:
+ sprintf(temp,"%o/%o", rat.num, rat.denom);
+ break;
+ case FLT:
+ sprintf(temp,"%f", rat_to_double(rat));
+ break;
+ }
+
+ strcat(resultat, temp);
+ return resultat;
+
+}