int main() { printf("seq_set_fmpq_pow...."); fflush(stdout); { long i; fmpq_t t, u; fmpz_holonomic_t op; fmpq_t c, initial; fmpz_holonomic_init(op); fmpq_init(t); fmpq_init(u); fmpq_init(c); fmpq_init(initial); fmpq_set_si(c, -7, 3); fmpz_holonomic_seq_set_fmpq_pow(op, c); fmpq_set_si(initial, -2, 1); for (i = 0; i < 20; i++) { fmpz_holonomic_get_nth_fmpq(t, op, initial, 0, i); fmpz_pow_ui(fmpq_numref(u), fmpq_numref(c), i); fmpz_pow_ui(fmpq_denref(u), fmpq_denref(c), i); fmpz_mul_si(fmpq_numref(u), fmpq_numref(u), -2); if (!fmpq_equal(t, u)) { printf("FAIL\n"); printf("i = %ld, t = ", i); fmpq_print(t); printf(" u = "); fmpq_print(u); printf("\n"); abort(); } } fmpq_clear(c); fmpq_clear(t); fmpq_clear(u); fmpq_clear(initial); fmpz_holonomic_clear(op); } flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
void bernoulli_cache_compute(long n) { if (bernoulli_cache_num < n) { long i, new_num; bernoulli_rev_t iter; if (bernoulli_cache_num == 0) { flint_register_cleanup_function(bernoulli_cleanup); } new_num = FLINT_MAX(bernoulli_cache_num + 128, n); bernoulli_cache = flint_realloc(bernoulli_cache, new_num * sizeof(fmpq)); for (i = bernoulli_cache_num; i < new_num; i++) fmpq_init(bernoulli_cache + i); i = new_num - 1; i -= (i % 2); bernoulli_rev_init(iter, i); for ( ; i >= bernoulli_cache_num; i -= 2) { bernoulli_rev_next(fmpq_numref(bernoulli_cache + i), fmpq_denref(bernoulli_cache + i), iter); } bernoulli_rev_clear(iter); if (new_num > 1) fmpq_set_si(bernoulli_cache + 1, -1, 2); bernoulli_cache_num = new_num; } }
static void _acb_unit_root(acb_t res, ulong order, slong prec) { fmpq_t t; fmpq_init(t); fmpq_set_si(t, 2, order); arb_sin_cos_pi_fmpq(acb_imagref(res), acb_realref(res), t, prec); fmpq_clear(t); }
int main() { long iter; flint_rand_t state; printf("series_fmpq_hypgeom...."); fflush(stdout); flint_randinit(state); for (iter = 0; iter < 250; iter++) { fmprb_ptr u, v; fmpq_t a; ulong p, q; long i, len, prec1, prec2; len = 1 + n_randint(state, 10); prec1 = 2 + n_randint(state, 1000); prec2 = prec1 + 30; u = _fmprb_vec_init(len); v = _fmprb_vec_init(len); fmpq_init(a); q = 1 + n_randint(state, 20); p = q - n_randint(state, q); fmpq_set_si(a, p, q); gamma_series_fmpq_hypgeom(u, a, len, prec1); gamma_series_fmpq_hypgeom(v, a, len, prec2); for (i = 0; i < len; i++) { if (!fmprb_overlaps(u + i, v + i)) { printf("FAIL: overlap\n\n"); printf("p = %lu, q = %lu, len = %ld, i = %ld\n\n", p, q, len, i); printf("u = "); fmprb_printd(u + i, prec1 / 3.33); printf("\n\n"); printf("v = "); fmprb_printd(v + i, prec2 / 3.33); printf("\n\n"); abort(); } } fmpq_clear(a); _fmprb_vec_clear(u, len); _fmprb_vec_clear(v, len); } flint_randclear(state); flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main(void) { int i; FLINT_TEST_INIT(state); flint_printf("set_si...."); fflush(stdout); for (i = 0; i < 10000; i++) { fmpq_t x, y; fmpz_t p, q; slong P, Q; fmpq_init(x); fmpq_init(y); fmpz_init(p); fmpz_init(q); P = z_randtest(state); Q = n_randtest_not_zero(state); fmpz_set_si(p, P); fmpz_set_ui(q, Q); fmpq_set_fmpz_frac(x, p, q); fmpq_set_si(y, P, Q); if (!fmpq_is_canonical(y) || !fmpq_equal(x, y)) { flint_printf("FAIL"); flint_printf("p: "); fmpz_print(p); flint_printf("\n"); flint_printf("q: "); fmpz_print(q); flint_printf("\n"); flint_printf("x: "); fmpq_print(x); flint_printf("\n"); flint_printf("y: "); fmpq_print(y); flint_printf("\n"); abort(); } fmpq_clear(x); fmpq_clear(y); fmpz_clear(p); fmpz_clear(q); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return 0; }
void _acb_poly_roots_initial_values(acb_ptr roots, slong deg, slong prec) { slong i; fmpq_t q; fmpq_init(q); fmpq_set_si(q, 4, 10); arb_set_fmpq(acb_realref(roots + 0), q, prec); mag_zero(arb_radref(acb_realref(roots + 0))); fmpq_set_si(q, 9, 10); arb_set_fmpq(acb_imagref(roots + 0), q, prec); mag_zero(arb_radref(acb_imagref(roots + 0))); fmpq_clear(q); for (i = 1; i < deg; i++) { acb_mul(roots + i, roots + i - 1, roots + 0, prec); mag_zero(arb_radref(acb_realref(roots + i))); mag_zero(arb_radref(acb_imagref(roots + i))); } }
void acb_dirichlet_pairing(acb_t res, const dirichlet_group_t G, ulong m, ulong n, slong prec) { ulong expo; expo = dirichlet_pairing(G, m, n); if (expo == DIRICHLET_CHI_NULL) acb_zero(res); else { fmpq_t t; fmpq_init(t); fmpq_set_si(t, 2 * expo, G->expo); arb_sin_cos_pi_fmpq(acb_imagref(res), acb_realref(res), t, prec); fmpq_clear(t); } }
void _dgsl_rot_mp_sqrt_sigma_2(fmpq_poly_t rop, const fmpz_poly_t g, const mpfr_t sigma, const int r, const long n, const mpfr_prec_t prec, const oz_flag_t flags) { fmpq_poly_zero(rop); fmpq_t r_q2; fmpq_init(r_q2); fmpq_set_si(r_q2, r, 1); fmpq_mul(r_q2, r_q2, r_q2); fmpq_neg(r_q2, r_q2); fmpq_poly_set_coeff_fmpq(rop, 0, r_q2); fmpq_clear(r_q2); fmpq_poly_t g_q; fmpq_poly_init(g_q); fmpq_poly_set_fmpz_poly(g_q, g); fmpq_poly_t ng; fmpq_poly_init(ng); fmpq_poly_oz_invert_approx(ng, g_q, n, prec, flags); fmpq_poly_t ngt; fmpq_poly_init(ngt); fmpq_poly_oz_conjugate(ngt, ng, n); fmpq_poly_t nggt; fmpq_poly_init(nggt); fmpq_poly_oz_mul(nggt, ng, ngt, n); /** We compute sqrt(g^-T · g^-1) to use it as the starting point for convergence on sqrt(σ^2 · g^-T · g^-1 - r^2) below. We can compute the former with less precision than the latter */ mpfr_t norm; mpfr_init2(norm, prec); fmpz_poly_eucl_norm_mpfr(norm, g, MPFR_RNDN); double p = mpfr_get_d(norm, MPFR_RNDN); /** |g^-1| ~= 1/|g| |g^-T| ~= |g^-1| |g^-1·g^-T| ~= sqrt(n)·|g^-T|·|g^-1| */ fmpq_poly_t sqrt_start; fmpq_poly_init(sqrt_start); p = log2(n) + 4*log2(p); int fail = -1; while (fail) { p = 2*p; if (fail<0) fail = fmpq_poly_oz_sqrt_approx_db(sqrt_start, nggt, n, p, prec/2, flags, NULL); else fail = fmpq_poly_oz_sqrt_approx_db(sqrt_start, nggt, n, p, prec/2, flags, sqrt_start); if(fail) fprintf(stderr, "FAILED for precision %7.1f with code (%d), doubling precision.\n", p, fail); } fmpq_t sigma2; fmpq_init(sigma2); fmpq_set_mpfr(sigma2, sigma, MPFR_RNDN); fmpq_poly_scalar_mul_fmpq(sqrt_start, sqrt_start, sigma2); fmpq_mul(sigma2, sigma2, sigma2); fmpq_poly_scalar_mul_fmpq(nggt, nggt, sigma2); fmpq_clear(sigma2); fmpq_poly_add(rop, rop, nggt); p = p + 2*log2(mpfr_get_d(sigma, MPFR_RNDN)); fmpq_poly_oz_sqrt_approx_babylonian(rop, rop, n, p, prec, flags, sqrt_start); mpfr_clear(norm); fmpq_poly_clear(g_q); fmpq_poly_clear(ng); fmpq_poly_clear(ngt); fmpq_poly_clear(nggt); fmpq_poly_clear(sqrt_start); }
int main() { slong iter; flint_rand_t state; flint_printf("rising_ui_rs...."); fflush(stdout); flint_randinit(state); /* compare with fmpq */ for (iter = 0; iter < 1000; iter++) { arb_t a, b; fmpq_t x, y, z; ulong n, step; slong i; arb_init(a); arb_init(b); fmpq_init(x); fmpq_init(y); fmpq_init(z); arb_randtest(a, state, 1 + n_randint(state, 1000), 10); arb_randtest(b, state, 1 + n_randint(state, 1000), 10); n = n_randint(state, 80); arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 10)); step = n_randint(state, 20); arb_rising_ui_rs(b, a, n, step, 2 + n_randint(state, 1000)); fmpq_one(y); for (i = 0; i < n; i++) { fmpq_set_si(z, i, 1); fmpq_add(z, x, z); fmpq_mul(y, y, z); } if (!arb_contains_fmpq(b, y)) { flint_printf("FAIL: containment\n\n"); flint_printf("n = %wu\n", n); flint_printf("a = "); arb_print(a); flint_printf("\n\n"); flint_printf("x = "); fmpq_print(x); flint_printf("\n\n"); flint_printf("b = "); arb_print(b); flint_printf("\n\n"); flint_printf("y = "); fmpq_print(y); flint_printf("\n\n"); abort(); } arb_clear(a); arb_clear(b); fmpq_clear(x); fmpq_clear(y); fmpq_clear(z); } /* aliasing of y and x */ for (iter = 0; iter < 500; iter++) { arb_t x, y; ulong n, step; slong prec; arb_init(x); arb_init(y); arb_randtest(x, state, 1 + n_randint(state, 200), 10); arb_randtest(y, state, 1 + n_randint(state, 200), 10); n = n_randint(state, 100); prec = 2 + n_randint(state, 1000); step = n_randint(state, 20); arb_rising_ui_rs(y, x, n, step, prec); arb_rising_ui_rs(x, x, n, step, prec); if (!arb_equal(x, y)) { flint_printf("FAIL: aliasing\n\n"); flint_printf("x = "); arb_print(x); flint_printf("\n\n"); flint_printf("y = "); arb_print(y); flint_printf("\n\n"); flint_printf("n = %wu\n", n); abort(); } arb_clear(x); arb_clear(y); } flint_randclear(state); flint_cleanup(); flint_printf("PASS\n"); return EXIT_SUCCESS; }
void test_field2(flint_rand_t state) { /* test in QQ[3^(1/4)] */ renf_t nf; renf_elem_t a; fmpq_t d, k; fmpq_poly_t p; fmpq_init(d); fmpq_poly_init(p); fmpq_set_si(d, 3, 1); renf_init_nth_root_fmpq(nf, d, 4, 10 + n_randint(state, 10)); fmpq_clear(d); fmpq_init(k); renf_elem_init(a, nf); /* test rationals */ /* --> 3^(1/4) */ fmpq_poly_set_coeff_si(p, 1, 1); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 2, "3^(1/4)"); /* --> 3^(1/4) - p_34 / q_34 */ /* ceil = 1 */ fmpz_set_str(fmpq_numref(k), "3871793620206447926", 10); fmpz_set_str(fmpq_denref(k), "2941926960111028069", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 0, k); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 1, "3^(1/4)"); /* --> 3^(1/4) - p_35 / q_35 */ /* ceil = 0 */ fmpz_set_str(fmpq_numref(k), "4393442218385055959", 10); fmpz_set_str(fmpq_denref(k), "3338294180377262795", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 0, k); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 0, "3^(1/4)"); /* --> 3^(1/4) - p_200 / q_200 */ fmpz_set_str(fmpq_numref(k), "51566086581654990699052199424489069476470199719930170996263916596162993841059250500042162091", 10); fmpz_set_str(fmpq_denref(k), "39181752754141206003124111890355840072199542360218864430892618765033598468868752146602163065", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 0, k); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 1, "3^(1/4)"); /* --> 3^(1/4) - p_201 / q_201 */ fmpz_set_str(fmpq_numref(k), "80796322887694335717970676356641716096406222234122724217891106756946083353628876437327250032", 10); fmpz_set_str(fmpq_denref(k), "61391929399498685496270115285641595325756438975454257165479021482386018841773493669624721869", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 0, k); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 0, "3^(1/4)"); /* */ fmpz_set_str(fmpq_numref(k), "13231942875843754343234", 10); fmpz_set_str(fmpq_denref(k), "14321431341231112121", 10); fmpq_poly_set_coeff_fmpq(p, 3, k); fmpz_set_str(fmpq_numref(k), "148589873455543948591", 10); fmpz_set_str(fmpq_denref(k), "12332111221111", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 2, k); fmpz_set_str(fmpq_numref(k), "1233321469998711012392391", 10); fmpz_set_str(fmpq_denref(k), "11814121556810191", 10); fmpq_poly_set_coeff_fmpq(p, 1, k); fmpz_set_str(fmpq_numref(k), "1249152314425433983202991363672458443993964487436329478959287771807457205881969983777233465754608376177969464841", 10); fmpz_set_str(fmpq_denref(k), "10720278662399817731713810382544982753044312944075797382817281426908463944866446042500978893159281330135", 10); fmpq_neg(k, k); fmpq_poly_set_coeff_fmpq(p, 0, k); renf_elem_set_fmpq_poly(a, p, nf); check_ceil(a, nf, 231, "3^(1/4)"); renf_elem_clear(a, nf); renf_clear(nf); fmpq_clear(k); fmpq_poly_clear(p); }
int main() { slong iter; flint_rand_t state; flint_printf("gamma_fmpq...."); fflush(stdout); flint_randinit(state); for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++) { arb_t r, s; fmpq_t q; slong accuracy, prec, pp, qq; prec = 2 + n_randint(state, 1 << n_randint(state, 12)); prec += 20; arb_init(r); arb_init(s); fmpq_init(q); pp = -100 + n_randint(state, 10000); qq = 1 + n_randint(state, 20); fmpq_set_si(q, pp, qq); arb_gamma_fmpq(r, q, prec); arb_set_fmpq(s, q, prec); arb_gamma(s, s, prec); if (!arb_overlaps(r, s)) { flint_printf("FAIL: containment\n\n"); flint_printf("prec = %wd\n", prec); flint_printf("q = "); fmpq_print(q); flint_printf("\n\n"); flint_printf("r = "); arb_printd(r, prec / 3.33); flint_printf("\n\n"); flint_printf("s = "); arb_printd(s, prec / 3.33); flint_printf("\n\n"); abort(); } if (!(fmpz_is_one(fmpq_denref(q)) && fmpz_sgn(fmpq_numref(q)) <= 0) && FLINT_ABS(pp / qq) < 10) { accuracy = arb_rel_accuracy_bits(r); if (accuracy < prec - 6) { flint_printf("FAIL: poor accuracy\n\n"); flint_printf("prec = %wd\n", prec); flint_printf("q = "); fmpq_print(q); flint_printf("\n\n"); flint_printf("r = "); arb_printd(r, prec / 3.33); flint_printf("\n\n"); abort(); } } arb_clear(r); arb_clear(s); fmpq_clear(q); } flint_randclear(state); flint_cleanup(); flint_printf("PASS\n"); return EXIT_SUCCESS; }
int main() { printf("get_series...."); fflush(stdout); { fmpq_t s; fmpz_holonomic_t re, de, ans; fmpq_init(s); fmpz_holonomic_init(re); fmpz_holonomic_init(de); fmpz_holonomic_init(ans); fmpz_holonomic_fit_length(ans, 4); fmpq_set_si(s, -7, 3); /* exp(x) */ fmpz_holonomic_fun_set_exp(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_si(ans->coeffs + 0, -1); fmpz_poly_set_si2(ans->coeffs + 1, 1, 1); _fmpz_holonomic_set_length(ans, 2); check(re, ans, de); /* sin/cos(x) */ fmpz_holonomic_fun_set_sin_cos(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "1 1"); fmpz_poly_set_str(ans->coeffs + 1, "0"); fmpz_poly_set_str(ans->coeffs + 2, "3 2 3 1"); _fmpz_holonomic_set_length(ans, 3); check(re, ans, de); /* log(x) */ fmpz_holonomic_fun_set_log(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_si(ans->coeffs + 0, 1); _fmpz_holonomic_set_length(ans, 1); check(re, ans, de); /* log(s+x) */ fmpz_holonomic_shift_fmpq(de, de, s); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 0 -3"); fmpz_poly_set_str(ans->coeffs + 1, "2 7 7"); _fmpz_holonomic_set_length(ans, 2); check(re, ans, de); /* atan(x) */ fmpz_holonomic_fun_set_atan(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 0 1"); fmpz_poly_set_str(ans->coeffs + 1, "0"); fmpz_poly_set_str(ans->coeffs + 2, "2 2 1"); _fmpz_holonomic_set_length(ans, 3); check(re, ans, de); /* atan(s+x) */ fmpz_holonomic_shift_fmpq(de, de, s); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 0 9"); fmpz_poly_set_str(ans->coeffs + 1, "2 -42 -42"); fmpz_poly_set_str(ans->coeffs + 2, "2 116 58"); _fmpz_holonomic_set_length(ans, 3); check(re, ans, de); /* erf(x) */ fmpz_holonomic_fun_set_erf(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 0 2"); fmpz_poly_set_str(ans->coeffs + 1, "0"); fmpz_poly_set_str(ans->coeffs + 2, "3 2 3 1"); _fmpz_holonomic_set_length(ans, 3); check(re, ans, de); /* erf(s+x) */ fmpz_holonomic_shift_fmpq(de, de, s); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 0 6"); fmpz_poly_set_str(ans->coeffs + 1, "2 -14 -14"); fmpz_poly_set_str(ans->coeffs + 2, "3 6 9 3"); _fmpz_holonomic_set_length(ans, 3); check(re, ans, de); /* x^s */ fmpz_holonomic_fun_set_pow_fmpq(de, s); fmpz_holonomic_get_series(re, de); fmpz_poly_set_si(ans->coeffs + 0, 1); _fmpz_holonomic_set_length(ans, 1); check(re, ans, de); /* (x+s)^s */ fmpz_holonomic_shift_fmpq(de, de, s); fmpz_holonomic_normalise_content(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 -7 -3"); fmpz_poly_set_str(ans->coeffs + 1, "2 7 7"); _fmpz_holonomic_set_length(ans, 2); check(re, ans, de); /* x^n */ fmpz_holonomic_fun_set_pow_fmpz(de, fmpq_numref(s)); fmpz_holonomic_get_series(re, de); fmpz_poly_set_si(ans->coeffs + 0, 1); _fmpz_holonomic_set_length(ans, 1); check(re, ans, de); /* (x+s)^n */ fmpz_holonomic_shift_fmpq(de, de, s); fmpz_holonomic_normalise_content(de); fmpz_holonomic_get_series(re, de); fmpz_poly_set_str(ans->coeffs + 0, "2 -21 -3"); fmpz_poly_set_str(ans->coeffs + 1, "2 7 7"); _fmpz_holonomic_set_length(ans, 2); check(re, ans, de); fmpz_holonomic_clear(re); fmpz_holonomic_clear(de); fmpz_holonomic_clear(ans); fmpq_clear(s); } flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
int main() { long iter; flint_rand_t state; printf("eta...."); fflush(stdout); flint_randinit(state); /* Test functional equation */ for (iter = 0; iter < 10000; iter++) { acb_t tau1, tau2, z1, z2, z3, t; fmpq_t arg; long e0, prec0, prec1, prec2; psl2z_t g; psl2z_init(g); fmpq_init(arg); acb_init(tau1); acb_init(tau2); acb_init(z1); acb_init(z2); acb_init(z3); acb_init(t); e0 = 1 + n_randint(state, 200); prec0 = 2 + n_randint(state, 2000); prec1 = 2 + n_randint(state, 2000); prec2 = 2 + n_randint(state, 2000); acb_randtest(tau1, state, prec0, e0); acb_randtest(tau2, state, prec0, e0); acb_randtest(z1, state, prec0, e0); acb_randtest(z2, state, prec0, e0); psl2z_randtest(g, state, 1 + n_randint(state, 200)); acb_modular_transform(tau2, g, tau1, prec0); acb_modular_eta(z1, tau1, prec1); acb_modular_eta(z2, tau2, prec2); /* apply transformation */ fmpq_set_si(arg, acb_modular_epsilon_arg(g), 12); arb_sin_cos_pi_fmpq(acb_imagref(t), acb_realref(t), arg, prec1); acb_mul(z3, z1, t, prec1); acb_mul_fmpz(t, tau1, &g->c, prec1); acb_add_fmpz(t, t, &g->d, prec1); acb_sqrt(t, t, prec1); acb_mul(z3, z3, t, prec1); if (!acb_overlaps(z3, z2)) { printf("FAIL (overlap)\n"); printf("tau1 = "); acb_printd(tau1, 15); printf("\n\n"); printf("tau2 = "); acb_printd(tau2, 15); printf("\n\n"); printf("g = "); psl2z_print(g); printf("\n\n"); printf("z1 = "); acb_printd(z1, 15); printf("\n\n"); printf("z2 = "); acb_printd(z2, 15); printf("\n\n"); printf("z3 = "); acb_printd(z3, 15); printf("\n\n"); abort(); } acb_modular_eta(tau1, tau1, prec2); if (!acb_overlaps(z1, tau1)) { printf("FAIL (aliasing)\n"); printf("tau1 = "); acb_print(tau1); printf("\n\n"); printf("tau2 = "); acb_print(tau2); printf("\n\n"); printf("z1 = "); acb_print(z1); printf("\n\n"); printf("z2 = "); acb_print(z2); printf("\n\n"); abort(); } acb_clear(tau1); acb_clear(tau2); acb_clear(z1); acb_clear(z2); acb_clear(z3); acb_clear(t); psl2z_clear(g); fmpq_clear(arg); } /* Test special values */ for (iter = 0; iter < 100; iter++) { acb_t tau, z; arb_t t, u; long prec; acb_init(tau); acb_init(z); arb_init(t); arb_init(u); prec = 2 + n_randint(state, 2000); acb_randtest(z, state, prec, 10); acb_onei(tau); acb_modular_eta(z, tau, prec); arb_one(t); arb_mul_2exp_si(t, t, -2); arb_gamma(t, t, prec); arb_const_pi(u, prec); arb_root(u, u, 4, prec); arb_pow_ui(u, u, 3, prec); arb_div(t, t, u, prec); arb_mul_2exp_si(t, t, -1); if (!arb_overlaps(acb_realref(z), t) || !arb_contains_zero(acb_imagref(z))) { printf("FAIL (value 1)\n"); printf("tau = "); acb_print(tau); printf("\n\n"); printf("z = "); acb_print(z); printf("\n\n"); abort(); } acb_clear(tau); acb_clear(z); arb_clear(t); arb_clear(u); } flint_randclear(state); flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
void set_from_long(ElementType& result, long a) const {fmpq_set_si(&result, a, 1);}
void set_var(ElementType& result, int v) const {fmpq_set_si(&result,1,1);}