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

◆ invert()

ring_elem PolyRing::invert ( const ring_elem f) const
virtual

Implements Ring.

Definition at line 961 of file poly.cpp.

962{
963 Nterm *ft = f;
964 if (is_zero(f))
965 {
966 ERROR("cannot divide by zero");
967 return ZERO_RINGELEM;
968 }
969 if (ft->next == nullptr)
970 {
971 if (M_->is_one(ft->monom))
972 {
973 Nterm *t = new_term();
974 t->coeff = K_->invert(ft->coeff);
975 M_->one(t->monom);
976 return t;
977 }
978 else if (M_->is_invertible(ft->monom))
979 {
980 Nterm *t = new_term();
981 t->coeff = K_->invert(ft->coeff);
982 M_->power(ft->monom, -1, t->monom);
983 return t;
984 }
985 }
986
987 ERROR("element is not invertible in this ring");
988 return ZERO_RINGELEM;
989}
Nterm * new_term() const
Definition poly.cpp:146
virtual bool is_zero(const ring_elem f) const
Definition poly.cpp:487
const Ring * K_
Definition polyring.hpp:123
const Monoid * M_
Definition polyring.hpp:124
const int ERROR
Definition m2-mem.cpp:55
#define ZERO_RINGELEM
Definition ring.hpp:677
Nterm * next
Definition ringelem.hpp:157
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160

References Nterm::coeff, ERROR, is_zero(), PolynomialRing::K_, PolynomialRing::M_, Nterm::monom, new_term(), Nterm::next, and ZERO_RINGELEM.

Referenced by power(), and power().