mirror of
https://github.com/vale981/arb
synced 2025-03-05 17:31:38 -05:00
84 lines
2.6 KiB
C
84 lines
2.6 KiB
C
/*
|
|
Copyright (C) 2021 Fredrik Johansson
|
|
|
|
This file is part of Arb.
|
|
|
|
Arb is free software: you can redistribute it and/or modify it under
|
|
the terms of the GNU Lesser General Public License (LGPL) as published
|
|
by the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version. See <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "arb_hypgeom.h"
|
|
|
|
ARB_DLL extern arb_hypgeom_gamma_coeff_t arb_hypgeom_gamma_coeffs[ARB_HYPGEOM_GAMMA_TAB_NUM];
|
|
|
|
int main()
|
|
{
|
|
flint_rand_t state;
|
|
|
|
flint_printf("gamma_taylor_tab....");
|
|
fflush(stdout);
|
|
|
|
flint_randinit(state);
|
|
|
|
{
|
|
slong n, prec, maxprec;
|
|
arb_t c;
|
|
arf_t d;
|
|
arb_ptr v, f;
|
|
|
|
v = _arb_vec_init(ARB_HYPGEOM_GAMMA_TAB_NUM);
|
|
f = _arb_vec_init(2);
|
|
|
|
arb_one(f);
|
|
arb_one(f + 1);
|
|
arf_init(d);
|
|
|
|
_arb_poly_rgamma_series(v, f, 2, ARB_HYPGEOM_GAMMA_TAB_NUM,
|
|
ARB_HYPGEOM_GAMMA_TAB_PREC + 2 * ARB_HYPGEOM_GAMMA_TAB_NUM);
|
|
|
|
for (n = 1; n < ARB_HYPGEOM_GAMMA_TAB_NUM; n++)
|
|
{
|
|
maxprec = arb_hypgeom_gamma_coeffs[n].nlimbs;
|
|
maxprec *= 64;
|
|
|
|
for (prec = 2; prec <= ARB_HYPGEOM_GAMMA_TAB_PREC; prec += (prec < maxprec - 64 ? n_randint(state, 64) : 1))
|
|
{
|
|
if (_arb_hypgeom_gamma_coeff_shallow(arb_midref(c), arb_radref(c), n, prec))
|
|
{
|
|
if (!arb_contains(c, v + n))
|
|
{
|
|
flint_printf("FAIL\n\n");
|
|
flint_printf("prec = %wd, n = %wd\n\n", prec, n);
|
|
flint_printf("c = "); arb_printn(c, 1000, 0); flint_printf("\n\n");
|
|
flint_printf("v = "); arb_printn(v + n, 1000, 0); flint_printf("\n\n");
|
|
flint_abort();
|
|
}
|
|
}
|
|
}
|
|
|
|
_arb_hypgeom_gamma_coeff_shallow(arb_midref(c), arb_radref(c), n, maxprec);
|
|
arf_set_round(d, arb_midref(v + n), maxprec, ARF_RND_DOWN);
|
|
|
|
if (!arf_equal(arb_midref(c), d))
|
|
{
|
|
flint_printf("FAIL\n\n");
|
|
flint_printf("prec = %wd, n = %wd\n\n", prec, n);
|
|
flint_printf("c = "); arb_printn(c, 1000, 0); flint_printf("\n\n");
|
|
flint_printf("d = "); arf_printd(d, 1000); flint_printf("\n\n");
|
|
flint_abort();
|
|
}
|
|
}
|
|
|
|
_arb_vec_clear(v, ARB_HYPGEOM_GAMMA_TAB_NUM);
|
|
_arb_vec_clear(f, 2);
|
|
arf_clear(d);
|
|
}
|
|
|
|
flint_randclear(state);
|
|
flint_cleanup();
|
|
flint_printf("PASS\n");
|
|
return EXIT_SUCCESS;
|
|
}
|
|
|