94 ASSERT(
x.
level() > 0,
"type error: polynomial variable expected" );
95 ASSERT( !
g.isZero(),
"math error: division by zero" );
105 int fDegree =
degree( F, X );
107 if ( (fDegree < 0) || (fDegree < gDegree) )
133 while ( ( dv <= dr ) && ( !r.
isZero()) )
174 ASSERT(
x.
level() > 0,
"type error: polynomial variable expected" );
175 ASSERT( !
g.isZero(),
"math error: division by zero" );
185 int fDegree =
degree( F, X );
187 if ( fDegree < 0 || fDegree < gDegree )
225 ASSERT(
x.
level() > 0,
"type error: polynomial variable expected" );
226 ASSERT( !
g.isZero(),
"math error: division by zero" );
236 int fDegree =
degree( F, X );
238 if ( fDegree < 0 || fDegree < gDegree ) {
264 if (
f.inBaseDomain() )
345 else if (
f.isZero() )
348 if ( (
f.inCoeffDomain() ||
g.inCoeffDomain())
353 if (
f.inCoeffDomain() )
362 int fLevel =
f.level();
363 int gLevel =
g.level();
364 if ( (gLevel > 0) && (fLevel == gLevel) )
375 else if ( gLevel < fLevel )
396 else if (
f.isZero() )
399 if ( (
f.inCoeffDomain() ||
g.inCoeffDomain())
404 if (
f.inCoeffDomain() )
416 int fLevel =
f.level();
417 int gLevel =
g.level();
418 if ( (gLevel > 0) && (fLevel == gLevel) )
435 else if ( gLevel < fLevel )
462 else if (
f.isZero() )
465 if (
f.inCoeffDomain() ||
g.inCoeffDomain())
468 if (
f.inCoeffDomain() )
482 int fLevel =
f.level();
483 int gLevel =
g.level();
484 if ( (gLevel > 0) && (fLevel == gLevel) )
488 bool dividestail=
tryFdivides (
f.tailcoeff(),
g.tailcoeff(),
M, fail);
490 if (fail || !dividestail)
493 if (fail || !dividesLC)
497 if (fail || !divides)
501 else if ( gLevel < fLevel )
513 if (fail || !divides)
538 if (
f.inBaseDomain() )
544 if ( coeffMaxNorm >
result )
567 ASSERT( (
f.inBaseDomain() ||
f.isUnivariate()) &&
f.LC().inZ(),
568 "type error: univariate poly over Z expected" );
Rational abs(const Rational &a)
void tryInvert(const CanonicalForm &F, const CanonicalForm &M, CanonicalForm &inv, bool &fail)
void psqr(const CanonicalForm &f, const CanonicalForm &g, CanonicalForm &q, CanonicalForm &r, const Variable &x)
void psqr ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm & q, CanonicalForm & r,...
CanonicalForm bCommonDen(const CanonicalForm &f)
CanonicalForm bCommonDen ( const CanonicalForm & f )
static CanonicalForm internalBCommonDen(const CanonicalForm &f)
static CanonicalForm internalBCommonDen ( const CanonicalForm & f )
CanonicalForm maxNorm(const CanonicalForm &f)
CanonicalForm maxNorm ( const CanonicalForm & f )
bool fdivides(const CanonicalForm &f, const CanonicalForm &g)
bool fdivides ( const CanonicalForm & f, const CanonicalForm & g )
bool tryFdivides(const CanonicalForm &f, const CanonicalForm &g, const CanonicalForm &M, bool &fail)
same as fdivides but handles zero divisors in Z_p[t]/(f)[x1,...,xn] for reducible f
void out_cf(const char *s1, const CanonicalForm &f, const char *s2)
cf_algorithm.cc - simple mathematical algorithms.
CanonicalForm psr(const CanonicalForm &rr, const CanonicalForm &vv, const Variable &x)
CanonicalForm psr ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x )
CanonicalForm psq(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm psq ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x )
CanonicalForm euclideanNorm(const CanonicalForm &f)
CanonicalForm euclideanNorm ( const CanonicalForm & f )
declarations of higher level algorithms.
#define ASSERT(expression, message)
static const int SW_RATIONAL
set to 1 for computations over Q
Interface to generate InternalCF's over various domains from intrinsic types or mpz_t's.
Iterators for CanonicalForm's.
class to iterate through CanonicalForm's
factory's class for variables
const Variable & v
< [in] a sqrfree bivariate poly
some useful template functions.
template CanonicalForm tmax(const CanonicalForm &, const CanonicalForm &)
gmp_float sqrt(const gmp_float &a)