本文整理汇总了C++中base::as_unipoly方法的典型用法代码示例。如果您正苦于以下问题:C++ base::as_unipoly方法的具体用法?C++ base::as_unipoly怎么用?C++ base::as_unipoly使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类base
的用法示例。
在下文中一共展示了base::as_unipoly方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: copyobject_to
void unipoly::copyobject_to(base &x)
{
#ifdef COPY_VERBOSE
cout << "unipoly::copyobject_to()\n";
print_as_vector(cout);
#endif
Vector::copyobject_to(x);
x.as_unipoly().settype_unipoly();
#ifdef COPY_VERBOSE
x.as_unipoly().print_as_vector(cout);
#endif
}
示例2: add_to
void unipoly::add_to(base &x, base &y)
{
unipoly& px = x.as_unipoly();
unipoly py;
base a;
INT d1, d2, d3, i;
if (s_kind() != UNIPOLY) {
cout << "unipoly::add_to() this not a unipoly\n";
exit(1);
}
if (x.s_kind() != UNIPOLY) {
cout << "unipoly::add_to() x is not a unipoly\n";
exit(1);
}
d1 = degree();
d2 = px.degree();
d3 = MAXIMUM(d1, d2);
py.m_l(d3 + 1);
a = s_i(0);
a.zero();
for (i = 0; i <= d1; i++) {
py[i] = s_i(i);
}
for (; i <= d3; i++) {
py[i] = a;
}
for (i = 0; i <= d2; i++) {
py[i] += px.s_i(i);
}
py.swap(y);
}
示例3: mult_to
void unipoly::mult_to(base &x, base &y)
{
unipoly& px = x.as_unipoly();
unipoly py;
base a;
INT d1, d2, d3, i, j, k;
if (s_kind() != UNIPOLY) {
cout << "unipoly::mult_to() this not a unipoly\n";
exit(1);
}
if (x.s_kind() != UNIPOLY) {
cout << "unipoly::mult_to() x is not a unipoly\n";
exit(1);
}
d1 = degree();
d2 = px.degree();
d3 = d1 + d2;
py.m_l(d3 + 1);
a = s_i(0);
a.zero();
for (i = 0; i <= d3; i++) {
py[i] = a;
}
for (i = 0; i <= d1; i++) {
for (j = 0; j <= d2; j++) {
k = i + j;
a.mult(s_i(i), px.s_i(j));
py[k] += a;
}
}
py.swap(y);
}
示例4: normalize
void unipoly::normalize(base &p)
{
if (p.s_kind() != UNIPOLY) {
cout << "unipoly::normalize() p not an UNIPOLY" << endl;
exit(1);
}
unipoly p1 = p.as_unipoly();
unipoly q, r;
integral_division(p1, q, r, 0);
swap(r);
}
示例5: compare_with_euklidean
INT unipoly::compare_with_euklidean(base &a)
{
INT d1, d2;
unipoly &pa = a.as_unipoly();
d1 = degree();
d2 = pa.degree();
if (d1 < d2)
return -1;
else if (d1 > d2)
return 1;
return 0;
}
示例6: integral_division
void unipoly::integral_division(base &x, base &q, base &r, INT verbose_level)
{
INT f_v = (verbose_level >= 1);
INT dm, dn, dq, i, j, ii, jj;
base a, av, b, bav, c;
unipoly &n = x.as_unipoly();
unipoly qq, rr;
if (f_v) {
cout << "unipoly::integral_division" << endl;
cout << "m=" << *this << endl;
cout << "n=" << x << endl;
}
dm = degree();
dn = n.degree();
if (dn == 0) {
if (n[0].is_zero()) {
cout << "unipoly::integral_division(): division by zero" << endl;
exit(1);
}
}
if (dn > dm) {
if (f_v) {
cout << "unipoly::integral_division dn > dm, no division possible" << endl;
}
qq.zero();
rr = *this;
qq.swap(q);
rr.swap(r);
return;
}
dq = dm - dn;
qq.m_l(dq + 1);
rr = *this;
// cout << "rr=" << rr << endl;
a = n[dn];
if (f_v) {
cout << "unipoly::integral_division a=" << a << endl;
}
av = a;
av.invert();
if (f_v) {
cout << "unipoly::integral_division av=" << av << endl;
}
for (i = dm, j = dq; i >= dn; i--, j--) {
if (f_v) {
cout << "unipoly::integral_division i=" << i << " j=" << j << endl;
}
b = rr[i];
if (f_v) {
cout << "unipoly::integral_division b=" << b << endl;
cout << "unipoly::integral_division av=" << av << endl;
cout << "unipoly::integral_division before mult" << endl;
}
bav.mult(b, av);
qq[j] = bav;
// cout << "i=" << i << " bav=" << bav << endl;
for (ii = i, jj = dn; jj >= 0; ii--, jj--) {
if (f_v) {
cout << "unipoly::integral_division ii=" << ii << " jj=" << jj << endl;
}
c = n[jj];
c *= bav;
c.negate();
rr[ii] += c; // rr[ii] -= bav * this[jj]
if (ii == i && !rr[ii].is_zero()) {
cout << "unipoly::integral_division(): ii == i && !rr[ii].is_zero()\n";
exit(1);
}
// cout << "c=" << c << endl;
// cout << "rr[ii]=" << rr[ii] << endl;
}
// cout << "i=" << i << " rr=" << rr << endl;
}
qq.swap(q);
rr.swap(r);
if (f_v) {
cout << "q=" << q << endl;
cout << "r=" << r << endl;
}
}