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

◆ gb_reduce() [2/2]

void HermiteComputation::gb_reduce ( vec & f,
vec & fsyz ) const
private

Definition at line 423 of file hermite.cpp.

424{
425 // Reduce f so that each of its terms are < corresponding initial term
426 // (in absolute value).
427 vecterm head;
428 vecterm *result = &head;
429 head.next = nullptr;
430 while (f != nullptr)
431 {
432 int x = f->comp;
433 hm_elem *h = initial[x];
434 if (h != nullptr)
435 {
436 ring_elem v;
437 ring_elem rem =
438 globalZZ->remainderAndQuotient(f->coeff, h->f->coeff, v);
439 bool do_reduce = !globalZZ->is_zero(v);
440 if (do_reduce)
441 {
442 v = globalZZ->negate(v);
443 vec g = globalZZ->mult_vec(v, h->f);
444 globalZZ->add_vec_to(f, g);
445 vec gsyz = globalZZ->mult_vec(v, h->fsyz);
446 globalZZ->add_vec_to(fsyz, gsyz);
447 }
448 if (globalZZ->is_zero(rem)) continue;
449 }
450 // The lead term stays
451 result->next = f;
452 f = f->next;
453 result = result->next;
454 result->next = nullptr;
455 continue;
456 }
457
458 f = head.next;
459}
vec mult_vec(int n, vec v) const
void add_vec_to(vec &v, vec &w) const
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
VALGRIND_MAKE_MEM_DEFINED & result(result)
const mpreal rem(const mpreal &x, const mpreal &y, mp_rnd_t rnd_mode=mpreal::get_default_rnd())
Definition mpreal.h:2628
volatile int x
vec f
Definition hermite.hpp:46
vec fsyz
Definition hermite.hpp:47

References hm_elem::f, hm_elem::fsyz, globalZZ, vec::next, result(), and x.