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

◆ add()

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

Implements Ring.

Definition at line 487 of file localring.cpp.

488{
489 const local_elem *f = a.get_local_elem();
490 const local_elem *g = b.get_local_elem();
491 ring_elem top, bottom;
492
493 if (mRing->is_equal(f->denom, g->denom))
494 {
495 top = mRing->add(f->numer, g->numer);
496 bottom = mRing->copy(f->denom);
497 }
498 else
499 {
500 top = mRing->mult(f->numer, g->denom);
501 ring_elem tmp = mRing->mult(f->denom, g->numer);
502 mRing->add_to(top, tmp);
503 bottom = mRing->mult(f->denom, g->denom);
504 if (mRing->is_zero(bottom)) return set_non_unit_frac(f->denom);
505 }
506 local_elem *result = make_elem(top, bottom);
507 return ring_elem(result);
508}
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().