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

◆ power() [2/2]

ring_elem FractionField::power ( const ring_elem f,
mpz_srcptr n ) const
virtual

Exponentiation. This is the default function, if a class doesn't define this.

Reimplemented from Ring.

Definition at line 549 of file frac.cpp.

550{
551 frac_elem *f = FRAC_VAL(a);
552 ring_elem top, bottom;
553 if (mpz_sgn(n) >= 0)
554 {
555 top = R_->power(f->numer, n);
556 bottom = R_->power(f->denom, n);
557
558 if (R_->is_zero(bottom)) return set_non_unit_frac(f->denom);
559 }
560 else
561 {
562 if (R_->is_zero(f->numer))
563 {
564 throw exc::division_by_zero_error();
565 }
566 mpz_t abs_n;
567 mpz_init(abs_n);
568 mpz_abs(abs_n, n);
569
570 top = R_->power(f->denom, abs_n);
571 bottom = R_->power(f->numer, abs_n);
572
573 mpz_clear(abs_n);
574
575 if (R_->is_zero(bottom)) return set_non_unit_frac(f->numer);
576 }
577
578 return FRAC_RINGELEM(make_elem(top, bottom));
579}
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
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_, and set_non_unit_frac().