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

◆ lower_associate_divisor()

bool M2::RingQQ::lower_associate_divisor ( ring_elem & f,
const ring_elem g ) const
inlinevirtual

Reimplemented from Ring.

Definition at line 543 of file aring-glue.hpp.

544 {
545 mpq_srcptr a = MPQ_VAL(f);
546 mpq_srcptr b = MPQ_VAL(g);
547 int sa = mpq_sgn(a);
548 int sb = mpq_sgn(b);
549 int s = (sa == 0 ? sb : sa);
550 mpq_ptr result = getmemstructtype(mpq_ptr);
551 mpq_init(result);
552
553 mpz_gcd(mpq_numref(result), mpq_numref(a), mpq_numref(b));
554 mpz_lcm(mpq_denref(result), mpq_denref(a), mpq_denref(b));
555 if (s != mpq_sgn(result)) mpq_neg(result, result);
556 mpz_reallocate_limbs(mpq_numref(result));
557 mpz_reallocate_limbs(mpq_denref(result));
558 f = ring_elem(result);
559 return true; // the answer could become lower, if a newer g has a larger
560 // denom
561 }
void mpz_reallocate_limbs(mpz_ptr _z)
Definition gmp-util.h:46
void size_t s
Definition m2-mem.cpp:271
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemstructtype(S)
Definition m2-mem.h:143
#define MPQ_VAL(f)
Definition ringelem.hpp:206

References getmemstructtype, MPQ_VAL, mpz_reallocate_limbs(), result(), and s.