diff --git a/hypgeom/bound.c b/hypgeom/bound.c index 5173917e..5da773ea 100644 --- a/hypgeom/bound.c +++ b/hypgeom/bound.c @@ -27,82 +27,6 @@ #include "double_extras.h" #include "hypgeom.h" -void -fmpr_gamma_ui_lbound(fmpr_t x, ulong n, long prec) -{ - if (n == 0) abort(); - - if (n < 250) - { - fmpz_t t; - fmpz_init(t); - fmpz_fac_ui(t, n - 1); - fmpr_set_round_fmpz(x, t, prec, FMPR_RND_DOWN); - fmpz_clear(t); - } - else - { - /* (2 pi/x)^(1/2) * (x/e)^x < Gamma(x) */ - fmpr_t t, u; - - fmpr_init(t); - fmpr_init(u); - - /* lower bound for 2 pi */ - fmpr_set_ui_2exp_si(t, 843314855, -27); - fmpr_div_ui(t, t, n, prec, FMPR_RND_DOWN); - fmpr_sqrt(t, t, prec, FMPR_RND_DOWN); - - /* lower bound for 1/e */ - fmpr_set_ui_2exp_si(u, 197503771, -29); - fmpr_mul_ui(u, u, n, prec, FMPR_RND_DOWN); - - fmpr_pow_sloppy_ui(u, u, n, prec, FMPR_RND_DOWN); - - fmpr_mul(x, t, u, prec, FMPR_RND_DOWN); - - fmpr_clear(t); - fmpr_clear(u); - } -} - -void -fmpr_gamma_ui_ubound(fmpr_t x, ulong n, long prec) -{ - if (n == 0) abort(); - - if (n < 250) - { - fmpz_t t; - fmpz_init(t); - fmpz_fac_ui(t, n - 1); - fmpr_set_round_fmpz(x, t, prec, FMPR_RND_UP); - fmpz_clear(t); - } - else - { - fmpr_t t, u; - fmpr_init(t); - - /* Gamma(x) < e * (x / e)^x -- TODO: use a tighter bound */ - - fmpr_init(t); - fmpr_init(u); - - /* upper bound for 1/e */ - fmpr_set_ui_2exp_si(u, 197503773, -29); - fmpr_mul_ui(u, u, n, prec, FMPR_RND_UP); - fmpr_pow_sloppy_ui(u, u, n, prec, FMPR_RND_UP); - - /* upper bound for e */ - fmpr_set_ui_2exp_si(t, 364841613, -27); - fmpr_mul(x, t, u, prec, FMPR_RND_UP); - - fmpr_clear(t); - fmpr_clear(u); - } -} - long hypgeom_root_bound(const mag_t z, int r) {