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

◆ power() [1/2]

ring_elem LocalRing::power ( const ring_elem f,
int n ) const
virtual

Reimplemented from Ring.

Definition at line 543 of file localring.cpp.

544{
545 const local_elem *f = a.get_local_elem();
546 ring_elem top, bottom;
547 if (n >= 0)
548 {
549 top = mRing->power(f->numer, n);
550 bottom = mRing->power(f->denom, n);
551
552 if (mRing->is_zero(bottom)) return set_non_unit_frac(f->denom);
553 }
554 else
555 {
556 if (is_unit(a))
557 {
558 top = mRing->power(f->denom, -n);
559 bottom = mRing->power(f->numer, -n);
560 }
561 else
562 {
563 throw exc::engine_error("attempt to divide by a non-unit");
564 }
565
566 if (mRing->is_zero(bottom)) return set_non_unit_frac(f->numer);
567 }
568 return ring_elem(make_elem(top, bottom));
569}
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
virtual bool is_unit(const ring_elem f) const
const PolyRing * mRing
Definition localring.hpp:69
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(), is_unit(), make_elem(), mRing, local_elem::numer, and set_non_unit_frac().