Пример #1
0
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());
}
Пример #2
0
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));
    }
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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);
    }

}
Пример #8
0
/**
  * 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();
		}
Пример #10
0
 inline double abs (mpq_class a)
 {
   return std::fabs(a.get_d());
 }
Пример #11
0
QDebug operator<<(QDebug s, const mpq_class& m) {
    char b[65536] = "";
    gmp_sprintf (b, "%Qd", m.get_mpq_t());
    s << b;
    return s;
}
Пример #12
0
    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());
    }
Пример #13
0
 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(); 
 };
Пример #14
0
double
to_double(const mpq_class& st)
{
    return st.get_d();
}