typo
[barvinok.git] / genfun.cc
blobd93cbe5fd107a9797094d4671eb6ecc63fc19c4e
1 #include <iostream>
2 #include <genfun.h>
4 using std::cout;
6 void gen_fun::add(ZZ& cn, ZZ& cd, vec_ZZ& num, mat_ZZ& den)
8 short_rat * r = new short_rat;
9 r->n.coeff.SetDims(1, 2);
10 r->n.coeff[0][0] = cn;
11 r->n.coeff[0][1] = cd;
12 r->n.power.SetDims(1, num.length());
13 r->n.power[0] = num;
14 r->d.power = den;
16 for (int i = 0; i < r->d.power.NumRows(); ++i) {
17 int j;
18 for (j = 0; j < r->d.power.NumCols(); ++j)
19 if (r->d.power[i][j] != 0)
20 break;
21 if (r->d.power[i][j] < 0) {
22 r->d.power[i] = -r->d.power[i];
23 r->n.coeff[0][0] = -r->n.coeff[0][0];
24 r->n.power[0] += r->d.power[i];
28 term.push_back(r);
31 static void print_power(vec_ZZ& c, vec_ZZ& p)
33 bool first = true;
35 for (int i = 0; i < p.length(); ++i) {
36 if (p[i] == 0)
37 continue;
38 if (first) {
39 if (c[0] == -1 && c[1] == 1)
40 cout << "-";
41 else if (c[0] != 1 || c[1] != 1) {
42 cout << c[0];
43 if (c[1] != 1)
44 cout << " / " << c[1];
45 cout << " * ";
47 first = false;
48 } else
49 cout << " * ";
50 cout << "x" << i;
51 if (p[i] == 1)
52 continue;
53 if (p[i] < 0)
54 cout << "^(" << p[i] << ")";
55 else
56 cout << "^" << p[i];
58 if (first) {
59 cout << c[0];
60 if (c[1] != 1)
61 cout << " / " << c[1];
65 void gen_fun::print(void)
67 vec_ZZ mone;
68 mone.SetLength(1);
69 mone[0] = -1;
70 mone[1] = 1;
71 for (int i = 0; i < term.size(); ++i) {
72 if (i != 0)
73 cout << " + ";
74 cout << "(";
75 for (int j = 0; j < term[i]->n.coeff.NumRows(); ++j) {
76 if (j != 0)
77 cout << " + ";
78 print_power(term[i]->n.coeff[j], term[i]->n.power[j]);
80 cout << ")/(";
81 for (int j = 0; j < term[i]->d.power.NumRows(); ++j) {
82 if (j != 0)
83 cout << " * ";
84 cout << "(1";
85 print_power(mone, term[i]->d.power[j]);
86 cout << ")";
88 cout << ")";