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

◆ remainder_non_ZZ()

void gbA::remainder_non_ZZ ( POLY & f,
int degf,
bool use_denom,
ring_elem & denom )
private

Definition at line 1997 of file gb-default.cpp.

2022{
2024
2025 gbvector head;
2026 gbvector *frem = &head;
2027
2028 frem->next = nullptr;
2029 int count = 0;
2030 POLY h = f;
2031 while (!R->gbvector_is_zero(h.f))
2032 {
2033 int gap;
2034 R->gbvector_get_lead_exponents(_F, h.f, EXP);
2035 int x = h.f->comp;
2036 int w = find_good_divisor(EXP, x, degf, gap);
2037 // replaced gap, g.
2038 if (w < 0 || gap > 0)
2039 {
2040 frem->next = h.f;
2041 frem = frem->next;
2042 h.f = h.f->next;
2043 frem->next = nullptr;
2044 }
2045 else
2046 {
2047 POLY g = gb[w]->g;
2048 R->gbvector_reduce_lead_term(
2049 _F, _Fsyz, head.next, h.f, h.fsyz, g.f, g.fsyz, use_denom, denom);
2050 count++;
2051 // stats_ntail++;
2052 if (M2_gbTrace >= 10)
2053 {
2054 buffer o;
2055 o << " tail reducing by ";
2056 R->gbvector_text_out(o, _F, g.f, 2);
2057 o << "\n giving ";
2058 R->gbvector_text_out(o, _F, h.f, 3);
2059 emit_line(o.str());
2060 }
2061 }
2062 }
2063 h.f = head.next;
2064 R->gbvector_remove_content(h.f, h.fsyz, use_denom, denom);
2065 f.f = h.f;
2066 f.fsyz = h.fsyz;
2067 if ((M2_gbTrace & PRINT_SPAIR_TRACKING) != 0)
2068 {
2069 buffer o;
2070 o << "number of reduction steps was " << count;
2071 emit_line(o.str());
2072 }
2073 else if (M2_gbTrace >= 4 && M2_gbTrace != 15)
2074 {
2075 buffer o;
2076 o << "," << count;
2077 emit_wrapped(o.str());
2078 }
2079}
exponents::Exponents exponents_t
char * str()
Definition buffer.hpp:72
GBRing * R
int find_good_divisor(exponents_t e, int x, int degf, int &result_gap)
const FreeModule * _F
const FreeModule * _Fsyz
size_t exp_size
@ PRINT_SPAIR_TRACKING
void gb(IntermediateBasis &F, int n)
int M2_gbTrace
Definition m2-types.cpp:52
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
volatile int x
#define POLY(q)
Definition poly.cpp:23
gbvector * fsyz
Definition gbring.hpp:99
gbvector * f
Definition gbring.hpp:98
gbvector * next
Definition gbring.hpp:80
int comp
Definition gbring.hpp:82
void emit_wrapped(const char *s)
Definition text-io.cpp:27
void emit_line(const char *s)
Definition text-io.cpp:47

References _F, _Fsyz, ALLOCATE_EXPONENTS, gbvector::comp, emit_line(), emit_wrapped(), exp_size, POLY::f, find_good_divisor(), POLY::fsyz, gb(), M2_gbTrace, gbvector::next, POLY, PRINT_SPAIR_TRACKING, R, buffer::str(), and x.

Referenced by remainder().