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

◆ diff_term()

ring_elem PolyRing::diff_term ( const_monomial m,
const_monomial n,
monomial resultmon,
int use_coeff ) const
protected

Definition at line 2036 of file poly.cpp.

2040{
2041 int sign = 0;
2042 if (!M_->divides(m, n)) return K_->from_long(0);
2043 if (is_skew_ && use_coeff)
2044 {
2048 M_->to_expvector(m, EXP1);
2049 M_->to_expvector(n, EXP2);
2050 sign = skew_.diff(EXP1, EXP2, EXP3);
2051 M_->from_expvector(EXP3, resultmon);
2052 }
2053 else
2054 M_->divide(n, m, resultmon);
2055 ring_elem result = K_->from_long(1);
2056 if (!use_coeff) return result;
2057 gc_vector<int> e1(n_vars()), e2(n_vars());
2058 exponents_t exp1 = e1.data();
2059 exponents_t exp2 = e2.data();
2060 M_->to_expvector(m, exp1);
2061 M_->to_expvector(n, exp2);
2062
2063 if (is_skew_ && sign < 0) K_->negate_to(result);
2064
2065 for (int i = 0; i < n_vars(); i++)
2066 {
2067 for (int j = exp1[i] - 1; j >= 0; j--)
2068 {
2069 ring_elem g = K_->from_long(exp2[i] - j);
2070 K_->mult_to(result, g);
2071 if (K_->is_zero(result)) return result;
2072 }
2073 }
2074 return result;
2075}
exponents::Exponents exponents_t
SkewMultiplication skew_
Definition polyring.hpp:104
const Ring * K_
Definition polyring.hpp:123
const Monoid * M_
Definition polyring.hpp:124
int n_vars() const
Definition polyring.hpp:196
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
const mpreal exp2(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2299

References ALLOCATE_EXPONENTS, PolynomialRing::exp_size, PolynomialRing::is_skew_, PolynomialRing::K_, PolynomialRing::M_, monomial, PolynomialRing::n_vars(), result(), and PolynomialRing::skew_.

Referenced by diff().