void arb_max(arb_t z, const arb_t x, const arb_t y, slong prec) { arf_t left, right, t, xr, yr; if (arf_is_nan(arb_midref(x)) || arf_is_nan(arb_midref(y))) { arb_indeterminate(z); return; } arf_init(left); arf_init(right); arf_init(t); arf_init_set_mag_shallow(xr, arb_radref(x)); arf_init_set_mag_shallow(yr, arb_radref(y)); arf_sub(left, arb_midref(x), xr, prec, ARF_RND_FLOOR); arf_sub(t, arb_midref(y), yr, prec, ARF_RND_FLOOR); arf_max(left, left, t); arf_add(right, arb_midref(x), xr, prec, ARF_RND_CEIL); arf_add(t, arb_midref(y), yr, prec, ARF_RND_CEIL); arf_max(right, right, t); arb_set_interval_arf(z, left, right, prec); arf_clear(left); arf_clear(right); arf_clear(t); }
/* sample (x, y) so that x /in y */ void _sample_arf_in_arb(arf_t x, arb_t y, flint_rand_t state) { slong bits, prec, expbits; arf_t a, b; slong i, n; arf_init(a); arf_init(b); bits = 2 + n_randint(state, 1000); prec = 2 + n_randint(state, 1000); expbits = n_randint(state, 14); n = n_randint(state, 3); arf_randtest(x, state, bits, expbits); arf_set(a, x); arf_set(b, x); for (i = 0; i < n; i++) { arf_randtest(x, state, bits, expbits); arf_min(a, a, x); arf_max(b, b, x); } arb_set_interval_arf(y, a, b, prec); arf_clear(a); arf_clear(b); }