summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/asymptote/rational.asy
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-04-03 22:33:45 +0000
committerKarl Berry <karl@freefriends.org>2019-04-03 22:33:45 +0000
commit072987993bdb3cf5495219b96ad4056509ccb7ab (patch)
tree7db7f28ff1713a570c4ef960d5e4c2dbabf0fdc1 /Master/texmf-dist/asymptote/rational.asy
parent0714966cf940fe8c3abb344bdffd6744f88eec4d (diff)
asymptote 2.49
git-svn-id: svn://tug.org/texlive/trunk@50744 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/asymptote/rational.asy')
-rw-r--r--Master/texmf-dist/asymptote/rational.asy73
1 files changed, 57 insertions, 16 deletions
diff --git a/Master/texmf-dist/asymptote/rational.asy b/Master/texmf-dist/asymptote/rational.asy
index a142063806d..d24da0d6645 100644
--- a/Master/texmf-dist/asymptote/rational.asy
+++ b/Master/texmf-dist/asymptote/rational.asy
@@ -133,6 +133,26 @@ bool operator ==(rational[][] r, rational[][] s)
return all(sequence(new bool(int i) {return r[i] == s[i];},r.length));
}
+bool[] operator <(rational[] r, rational s)
+{
+ return sequence(new bool(int i) {return r[i] < s;},r.length);
+}
+
+bool[] operator >(rational[] r, rational s)
+{
+ return sequence(new bool(int i) {return r[i] > s;},r.length);
+}
+
+bool[] operator <=(rational[] r, rational s)
+{
+ return sequence(new bool(int i) {return r[i] <= s;},r.length);
+}
+
+bool[] operator >=(rational[] r, rational s)
+{
+ return sequence(new bool(int i) {return r[i] >= s;},r.length);
+}
+
rational min(rational a, rational b)
{
return a <= b ? a : b;
@@ -143,35 +163,47 @@ rational max(rational a, rational b)
return a >= b ? a : b;
}
+string string(rational r)
+{
+ return r.q == 1 ? string(r.p) : string(r.p)+"/"+string(r.q);
+}
+
+string texstring(rational r)
+{
+ if(r.q == 1) return string(r.p);
+ string s;
+ if(r.p < 0) s="-";
+ return s+"\frac{"+string(abs(r.p))+"}{"+string(r.q)+"}";
+}
-void write(string s="", rational r, suffix suffix=endl) {
- if(r.q == 1)
- write(s+string(r.p),suffix);
- else
- write(s+string(r.p)+"/"+string(r.q),suffix);
+void write(file fout=stdout, string s="", rational r, suffix suffix=none)
+{
+ write(fout,s+string(r),suffix);
}
-void write(string s="", rational[] a, suffix suffix=endl) {
+void write(file fout=stdout, string s="", rational[] a, suffix suffix=none)
+{
if(s != "")
- write(s);
+ write(fout,s);
for(int i=0; i < a.length; ++i) {
- write(i,none);
- write(':\t',a[i]);
+ write(fout,i,none);
+ write(fout,':\t',a[i],endl);
}
- write(suffix);
+ write(fout,suffix);
}
-void write(string s="", rational[][] a, suffix suffix=endl) {
+void write(file fout=stdout, string s="", rational[][] a, suffix suffix=none)
+{
if(s != "")
- write(s);
+ write(fout,s);
for(int i=0; i < a.length; ++i) {
rational[] ai=a[i];
for(int j=0; j < ai.length; ++j) {
- write(ai[j],tab);
+ write(fout,ai[j],tab);
}
- write();
+ write(fout,endl);
}
- write(suffix);
+ write(fout,suffix);
}
bool rectangular(rational[][] m)
@@ -203,9 +235,18 @@ rational max(rational[] a)
rational abs(rational r)
{
- return rational(abs(r.p),r.q,false);
+ return rational(abs(r.p),r.q,false);
+}
+
+rational[] operator -(rational[] r)
+{
+ return sequence(new rational(int i) {return -r[i];},r.length);
}
+rational[][] rationalidentity(int n)
+{
+ return sequence(new rational[](int i) {return sequence(new rational(int j) {return j == i ? 1 : 0;},n);},n);
+}
/*
rational r=rational(1,3)+rational(1,4);