def _mpfr_to_str(a): precision = int(log10(2) * gmp.mpfr_get_prec(a) + 2) buf = ffi.new('char []', precision + 10) fmtstr = "%.{0}Rg".format(precision) buflen = gmp.mpfr_sprintf(buf, fmtstr.encode('UTF-8'), a) if PY3: pybuf = ffi.string(buf).decode('UTF-8') else: pybuf = ffi.string(buf) if gmp.mpfr_number_p(a) and '.' not in pybuf: pybuf = pybuf + '.0' return pybuf
def __int__(self): if not gmp.mpfr_number_p(self._mpfr): raise ValueError("Cannot convert '%s' to int" % self) elif gmp.mpfr_fits_slong_p(self._mpfr, gmp.MPFR_RNDN): return gmp.mpfr_get_si(self._mpfr, gmp.MPFR_RNDN) elif gmp.mpfr_fits_ulong_p(self._mpfr, gmp.MPFR_RNDN): return gmp.mpfr_get_ui(self._mpfr, gmp.MPFR_RNDN) else: tmp_mpz = _new_mpz() gmp.mpfr_get_z(tmp_mpz, self._mpfr, gmp.MPFR_RNDN) res = _mpz_to_pylong(tmp_mpz) _del_mpz(tmp_mpz) return res