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

◆ ratConversion() [1/3]

ring_elem ChineseRemainder::ratConversion ( const ring_elem f,
mpz_srcptr m,
const PolyRing * RQ )
static

Definition at line 359 of file cra.cpp.

362{
363 mpq_t result_coeff;
364 mpq_init(result_coeff);
365 Nterm *f = ff;
366 Nterm head;
367 Nterm *result = &head;
368
369 const Monoid *M = RQ->getMonoid();
370 const Ring *K = RQ->getCoefficientRing();
371
372 for (; f != nullptr; f = f->next)
373 {
374 result->next = RQ->new_term();
375 result = result->next;
376 result->next = nullptr;
377 M->copy(f->monom, result->monom);
378 ratConversion(f->coeff.get_mpz(), m, result_coeff);
379 bool ok1 = K->from_rational(result_coeff, result->coeff);
380 (void)ok1;
381 assert(ok1); // K is supposed to contain (or be) the rationals, so this
382 // should not fail.
383 }
384
385 mpq_clear(result_coeff);
386 result->next = nullptr;
387 return head.next;
388}
static bool ratConversion(mpz_srcptr a, mpz_srcptr m, mpq_t result)
Definition cra.cpp:300
void copy(const_monomial m, monomial result) const
Definition monoid.cpp:475
Nterm * new_term() const
Definition poly.cpp:146
const Ring * getCoefficientRing() const
Definition polyring.hpp:200
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
virtual bool from_rational(const mpq_srcptr q, ring_elem &result) const =0
VALGRIND_MAKE_MEM_DEFINED & result(result)
Nterm * next
Definition ringelem.hpp:157
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References Nterm::coeff, Monoid::copy(), Ring::from_rational(), ring_elem::get_mpz(), PolynomialRing::getCoefficientRing(), PolynomialRing::getMonoid(), Nterm::monom, PolyRing::new_term(), Nterm::next, ratConversion(), and result().