def _new_mpfr(prec=0): """Return an initialized mpfr_t.""" global in_mpfr_cache if isinstance(prec, (int, long)): if not (prec == 0 or gmp.MPFR_PREC_MIN <= prec <= gmp.MPFR_PREC_MAX): raise ValueError("invalid prec %i (wanted %s <= prec <= %s)" % ( prec, gmp.MPFR_PREC_MIN, gmp.MPFR_PREC_MAX)) else: raise TypeError('an integer is required') if in_mpfr_cache: in_mpfr_cache -= 1 # Set default precision if prec == 0: gmp.mpfr_set_prec(mpfr_cache[in_mpfr_cache], gmp.mpfr_get_default_prec()) else: gmp.mpfr_set_prec(mpfr_cache[in_mpfr_cache], prec) return mpfr_cache[in_mpfr_cache] else: mpfr = ffi.new("mpfr_t") if prec == 0: gmp.mpfr_init(mpfr) else: gmp.mpfr_init2(mpfr, prec) return mpfr
def _init_mpfr_cache(): global mpfr_cache, in_mpfr_cache mpfr_cache = [] in_mpfr_cache = cache_size for _ in xrange(cache_size): mpfr = ffi.new("mpfr_t") gmp.mpfr_init(mpfr) mpfr_cache.append(mpfr)