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

◆ subtract()

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

Implements Ring.

Definition at line 491 of file frac.cpp.

492{
493 const frac_elem *f = FRAC_VAL(a);
494 const frac_elem *g = FRAC_VAL(b);
495 ring_elem top, bottom;
496
497 if (R_->is_equal(f->denom, g->denom))
498 {
499 top = R_->subtract(f->numer, g->numer);
500 bottom = R_->copy(f->denom);
501 }
502 else
503 {
504 top = R_->mult(f->numer, g->denom);
505 ring_elem tmp = R_->mult(f->denom, g->numer);
506 R_->subtract_to(top, tmp);
507 bottom = R_->mult(f->denom, g->denom);
508 if (R_->is_zero(bottom)) return set_non_unit_frac(f->denom);
509 }
510 frac_elem *result = make_elem(top, bottom);
511 return FRAC_RINGELEM(result);
512}
ring_elem set_non_unit_frac(ring_elem top) const
Definition frac.cpp:89
frac_elem * make_elem(ring_elem a, ring_elem b) const
Definition frac.cpp:182
const PolyRingFlat * R_
Definition frac.hpp:63
#define FRAC_VAL(f)
Definition frac.cpp:14
#define FRAC_RINGELEM(a)
Definition frac.cpp:15
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem numer
Definition frac.hpp:43
ring_elem denom
Definition frac.hpp:44

References frac_elem::denom, FRAC_RINGELEM, FRAC_VAL, make_elem(), frac_elem::numer, R_, result(), and set_non_unit_frac().

Referenced by is_equal().