Macaulay2 Engine
Loading...
Searching...
No Matches

◆ reduce_lead_term_ZZ()

bool QRingInfo_ZZ::reduce_lead_term_ZZ ( Nterm *& f,
const Nterm * g ) const
private

Definition at line 350 of file qring.cpp.

353{
354 const Monoid *M = R->getMonoid();
355 const ring_elem a = f->coeff;
356 const ring_elem b = g->coeff;
357 ring_elem u, v, rem;
359 if (globalZZ->is_zero(v)) return false;
360 v = globalZZ->negate(v);
361 bool result = globalZZ->is_zero(rem);
363 M->divide(f->monom, g->monom, MONOM1);
364 if (R->is_skew_commutative())
365 {
368 // We need to determine the sign
369 M->to_expvector(g->monom, EXP2);
370 M->to_expvector(MONOM1, EXP1);
371 if (R->getSkewInfo().mult_sign(EXP1, EXP2) < 0)
372 R->getCoefficients()->negate_to(v);
373 }
374
375 // now mult g to cancel
376 ring_elem g1 = const_cast<Nterm *>(g);
377 g1 = R->mult_by_term(g1, v, MONOM1);
378 ring_elem f1 = f;
379 R->internal_add_to(f1, g1);
380 f = f1;
381 return result;
382}
exponents::Exponents exponents_t
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
void divide(const_monomial m, const_monomial n, monomial result) const
Definition monoid.hpp:331
const PolyRing * R
Definition qring.hpp:83
size_t exp_size
Definition qring.hpp:86
size_t monom_size
Definition qring.hpp:87
virtual ring_elem negate(const ring_elem f) const
Definition ZZ.cpp:243
virtual bool is_zero(const ring_elem f) const
Definition ZZ.cpp:155
virtual ring_elem remainderAndQuotient(const ring_elem f, const ring_elem g, ring_elem &quot) const
Definition ZZ.cpp:317
RingZZ * globalZZ
Definition relem.cpp:13
#define monomial
Definition gb-toric.cpp:11
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
#define ALLOCATE_MONOMIAL(byte_len)
Definition monoid.hpp:65
const mpreal rem(const mpreal &x, const mpreal &y, mp_rnd_t rnd_mode=mpreal::get_default_rnd())
Definition mpreal.h:2628
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160

References ALLOCATE_EXPONENTS, ALLOCATE_MONOMIAL, Monoid::divide(), QRingInfo::exp_size, globalZZ, QRingInfo::monom_size, monomial, QRingInfo::R, result(), and Monoid::to_expvector().

Referenced by normal_form().