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

◆ remainder_ZZ()

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

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

1850{
1851 gbvector head;
1852 gbvector *frem = &head;
1853
1855
1856 (void) use_denom;
1857 (void) denom;
1858 frem->next = nullptr;
1859 int count = 0;
1860 POLY h = f;
1861 while (!R->gbvector_is_zero(h.f))
1862 {
1863 int gap;
1864 R->gbvector_get_lead_exponents(_F, h.f, EXP);
1865 int x = h.f->comp;
1867 h.f->coeff.get_mpz(), EXP, x, degf, gap);
1868 if (w < 0 || gap > 0)
1869 {
1870 frem->next = h.f;
1871 frem = frem->next;
1872 h.f = h.f->next;
1873 frem->next = nullptr;
1874 }
1875 else
1876 {
1877 POLY g = gb[w]->g;
1878 if (!R->gbvector_reduce_lead_term_ZZ(
1879 _F, _Fsyz, h.f, h.fsyz, g.f, g.fsyz))
1880 {
1881 // This term is still there, so we must move it to result.
1882 frem->next = h.f;
1883 frem = frem->next;
1884 h.f = h.f->next;
1885 frem->next = nullptr;
1886 }
1887 count++;
1888 if (M2_gbTrace == 15)
1889 {
1890 buffer o;
1891 o << " tail rem by g" << w;
1892 o << ", yielding ";
1893 R->gbvector_text_out(o, _F, h.f, 3);
1894 emit_line(o.str());
1895 }
1896 }
1897 }
1898 h.f = head.next;
1899 // Negate these if needed
1900 if (h.f != nullptr && mpz_sgn(h.f->coeff.get_mpz()) < 0)
1901 {
1902 R->gbvector_mult_by_coeff_to(h.f, globalZZ->minus_one());
1903 R->gbvector_mult_by_coeff_to(h.fsyz, globalZZ->minus_one());
1904 }
1905 f.f = h.f;
1906 f.fsyz = h.fsyz;
1907 if ((M2_gbTrace & PRINT_SPAIR_TRACKING) != 0)
1908 {
1909 buffer o;
1910 o << "number of reduction steps was " << count;
1911 emit_line(o.str());
1912 }
1913 else if (M2_gbTrace >= 4 && M2_gbTrace != 15)
1914 {
1915 buffer o;
1916 o << "," << count;
1917 emit_wrapped(o.str());
1918 }
1919}
exponents::Exponents exponents_t
ring_elem minus_one() const
Definition ring.hpp:358
char * str()
Definition buffer.hpp:72
GBRing * R
int find_good_monomial_divisor_ZZ(mpz_srcptr c, 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)
RingZZ * globalZZ
Definition relem.cpp:13
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
ring_elem coeff
Definition gbring.hpp:81
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
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

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

Referenced by remainder().