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

◆ eval()

ring_elem FractionField::eval ( const RingMap * map,
const ring_elem f,
int first_var ) const
virtual

Implements Ring.

Definition at line 611 of file frac.cpp.

614{
615 const Ring *S = map->get_ring();
616 const frac_elem *f = FRAC_VAL(a);
617 ring_elem top = R_->eval(map, f->numer, first_var);
618 ring_elem bottom = R_->eval(map, f->denom, first_var);
619 if (S->is_zero(bottom))
620 {
621 throw exc::division_by_zero_error();
622 S->remove(bottom);
623 top = S->from_long(0);
624 bottom = S->from_long(1);
625 }
626 ring_elem result = S->divide(top, bottom);
627 S->remove(top);
628 S->remove(bottom);
629 return result;
630}
const PolyRingFlat * R_
Definition frac.hpp:63
virtual void remove(ring_elem &f) const =0
virtual ring_elem divide(const ring_elem f, const ring_elem g) const =0
virtual ring_elem from_long(long n) const =0
virtual bool is_zero(const ring_elem f) const =0
Ring()
Definition ring.hpp:136
const Ring * get_ring() const
Definition ringmap.hpp:111
#define FRAC_VAL(f)
Definition frac.cpp:14
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition frac.hpp:43
ring_elem denom
Definition frac.hpp:44

References frac_elem::denom, Ring::divide(), FRAC_VAL, Ring::from_long(), RingMap::get_ring(), Ring::is_zero(), frac_elem::numer, R_, Ring::remove(), result(), and Ring::Ring().