void renf_elem_class::assign(const mpq_class & value) noexcept { if (nf == nullptr) fmpq_set_mpq(b, value.__get_mp()); else renf_elem_set_mpq(a, value.get_mpq_t(), nf->renf_t()); }
Teuchos::RCP<Number> Rational::from_mpq(const mpq_class i) { // If the result is an Integer, return an Integer: if (i.get_den() == 1) { return rcp(new Integer(i.get_num())); } else { return rcp(new Rational(i)); } }
mpf_class MpfFromMpq(Signal &sig, const mpq_class &num) { mpf_class numer = num.get_num(); mpf_class denom = num.get_den(); if (denom == 0) { Operator::SetError_DivideByZero(sig); return mpf_class(0); } return numer / denom; }
bool Rational::is_canonical(const mpq_class &i) { mpq_class x = i; x.canonicalize(); // If 'x' is an integer, it should not be Rational: if (x.get_den() == 1) return false; // if 'i' is not in canonical form: if (x.get_num() != i.get_num()) return false; if (x.get_den() != i.get_den()) return false; return true; }
bool Complex::is_canonical(const mpq_class &real, const mpq_class &imaginary) { mpq_class re = real; mpq_class im = imaginary; re.canonicalize(); im.canonicalize(); // If 'im' is 0, it should not be Complex: if (im.get_num() == 0) return false; // if 'real' or `imaginary` are not in canonical form: if (re.get_num() != real.get_num()) return false; if (re.get_den() != real.get_den()) return false; if (im.get_num() != imaginary.get_num()) return false; if (im.get_den() != imaginary.get_den()) return false; return true; }
bool _Format_o(Signal &sig, Formatter *pFormatter, const Formatter::Flags &flags, const mpq_class &num) { char *str = nullptr; ::gmp_asprintf(&str, Formatter::ComposeFlags(flags, "Qo").c_str(), num.get_mpq_t()); bool rtn = pFormatter->PutString(sig, str); ::free(str); return rtn; }
RCP<const Number> Complex::from_mpq(const mpq_class re, const mpq_class im) { // It is assumed that `re` and `im` are already in canonical form. if (im.get_num() == 0) { return Rational::from_mpq(re); } else { return make_rcp<const Complex>(re, im); } }
/** * Helper function to convert an mpq_class object into * its internal QString representation. Mainly used for * debugging. */ static QString mpqToString(const mpq_class & val) { char *p = 0; // use the gmp provided conversion routine gmp_asprintf(&p, "%Qd", val.get_mpq_t()); // convert it into a QString QString result = QString::fromLatin1(p); // and free up the resources allocated by gmp_asprintf __gmp_freefunc_t freefunc; mp_get_memory_functions(NULL, NULL, &freefunc); (*freefunc)(p, std::strlen(p) + 1); if (!result.contains(QLatin1Char('/'))) { result += QString::fromLatin1("/1"); } // done return result; }
void serialize(Archive & ar, mpq_class & t, unsigned int version) { ar & t.get_num(); ar & t.get_den(); }
inline double abs (mpq_class a) { return std::fabs(a.get_d()); }
QDebug operator<<(QDebug s, const mpq_class& m) { char b[65536] = ""; gmp_sprintf (b, "%Qd", m.get_mpq_t()); s << b; return s; }
mpq_class getNextConvergent(int n, mpq_class c1, mpq_class c2) const { int a = (*this)[n]; return mpq_class(c1.get_num() + a * c2.get_num(), c1.get_den() + a * c2.get_den()); }
int convert_high_precision_type<int>(const mpq_class& v) { mpz_class num = v.get_num(); mpz_class den = v.get_den(); num /= den; return num.get_si(); };
double to_double(const mpq_class& st) { return st.get_d(); }