X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fpolynomial%2Fmgcd.cpp;h=984ba32e6cb22c663afad13a51ce2fbdeedcacc7;hb=65f2693a0948d1db0bc68d7656c64e1fed91c158;hp=901f075a943f467355752a961183c62d83d0ad56;hpb=59fa68b8930779dfc419291d028b57b0d91d33d0;p=ginac.git diff --git a/ginac/polynomial/mgcd.cpp b/ginac/polynomial/mgcd.cpp index 901f075a..984ba32e 100644 --- a/ginac/polynomial/mgcd.cpp +++ b/ginac/polynomial/mgcd.cpp @@ -3,7 +3,7 @@ * Chinese remainder algorithm. */ /* - * GiNaC Copyright (C) 1999-2010 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2015 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,6 +40,7 @@ static cln::cl_I extract_integer_content(ex& Apr, const ex& A) { static const cln::cl_I n1(1); const numeric icont_ = A.integer_content(); + GINAC_ASSERT(cln::instanceof(icont_.to_cl_N(), cln::cl_RA_ring)); if (cln::instanceof(icont_.to_cl_N(), cln::cl_I_ring)) { const cln::cl_I icont = cln::the(icont_.to_cl_N()); if (icont != 1) { @@ -49,14 +50,12 @@ static cln::cl_I extract_integer_content(ex& Apr, const ex& A) Apr = A; return n1; } - } - if (cln::instanceof(icont_.to_cl_N(), cln::cl_RA_ring)) { + } else { Apr = (A/icont_).expand(); // A is a polynomail over rationals, so GCD is defined // up to arbitrary rational number. return n1; } - GINAC_ASSERT(NULL == "expected polynomial over integers or rationals"); } ex chinrem_gcd(const ex& A_, const ex& B_, const exvector& vars) @@ -70,7 +69,6 @@ ex chinrem_gcd(const ex& A_, const ex& B_, const exvector& vars) const cln::cl_I b_lc = integer_lcoeff(B, vars); const cln::cl_I g_lc = cln::gcd(a_lc, b_lc); - const ex& x(vars.back()); exp_vector_t n = std::min(degree_vector(A, vars), degree_vector(B, vars)); const int nTot = std::accumulate(n.begin(), n.end(), 0); const cln::cl_I A_max_coeff = to_cl_I(A.max_coefficient());