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

◆ syzygy()

void RingZZ::syzygy ( const ring_elem a,
const ring_elem b,
ring_elem & x,
ring_elem & y ) const
virtual

Implements Ring.

Definition at line 386 of file ZZ.cpp.

390{
391 assert(!is_zero(b));
392 // First check the special cases a = 0, b = 1, -1. Other cases: use gcd.
393 if (RingZZ::is_zero(a))
394 {
395 x = RingZZ::from_long(1);
396 y = RingZZ::from_long(0);
397 return;
398 }
399 mpz_srcptr bb = b.get_mpz();
400 if (mpz_cmp_ui(bb, 1) == 0)
401 {
402 x = RingZZ::from_long(1);
403 y = RingZZ::negate(a);
404 return;
405 }
406 if (mask_mpz_cmp_si(bb, -1) == 0)
407 {
408 x = RingZZ::from_long(1);
409 y = RingZZ::copy(a);
410 return;
411 }
412 ring_elem g = RingZZ::gcd(a, b);
413 y = RingZZ::divide(a, g);
414 x = RingZZ::divide(b, g);
416 if (mpz_sgn(x.get_mpz()) > 0)
417 y = RingZZ::negate(y);
418 else
419 x = RingZZ::negate(x);
420}
int mask_mpz_cmp_si(mpz_srcptr x, long int i)
Definition ZZ.hpp:53
virtual ring_elem negate(const ring_elem f) const
Definition ZZ.cpp:243
virtual bool is_zero(const ring_elem f) const
Definition ZZ.cpp:155
virtual ring_elem from_long(long n) const
Definition ZZ.cpp:110
virtual void remove(ring_elem &f) const
Definition ZZ.cpp:194
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:304
ring_elem gcd(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:361
virtual ring_elem copy(const ring_elem f) const
Definition ZZ.cpp:183
volatile int x
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References copy(), divide(), from_long(), gcd(), ring_elem::get_mpz(), is_zero(), mask_mpz_cmp_si(), negate(), remove(), and x.