示例#1
0
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
示例#2
0
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
示例#3
0
 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