Beispiel #1
0
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
Beispiel #2
0
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)