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

◆ subtract()

ring_elem LocalRing::subtract ( const ring_elem f,
const ring_elem g ) const
virtual

Implements Ring.

Definition at line 510 of file localring.cpp.

511{
512 const local_elem *f = a.get_local_elem();
513 const local_elem *g = b.get_local_elem();
514 ring_elem top, bottom;
515
516 if (mRing->is_equal(f->denom, g->denom))
517 {
518 top = mRing->subtract(f->numer, g->numer);
519 bottom = mRing->copy(f->denom);
520 }
521 else
522 {
523 top = mRing->mult(f->numer, g->denom);
524 ring_elem tmp = mRing->mult(f->denom, g->numer);
525 mRing->subtract_to(top, tmp);
526 bottom = mRing->mult(f->denom, g->denom);
527 if (mRing->is_zero(bottom)) return set_non_unit_frac(f->denom);
528 }
529 local_elem *result = make_elem(top, bottom);
530 return ring_elem(result);
531}
ring_elem set_non_unit_frac(ring_elem top) const
local_elem * make_elem(ring_elem a, ring_elem b) const
Definition localring.cpp:52
const PolyRing * mRing
Definition localring.hpp:69
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition localring.hpp:48
ring_elem denom
Definition localring.hpp:49
const local_elem * get_local_elem() const
Definition ringelem.hpp:136

References local_elem::denom, ring_elem::get_local_elem(), make_elem(), mRing, local_elem::numer, result(), and set_non_unit_frac().

Referenced by is_equal().