int mpfi_const_catalan (mpfi_ptr a) { mpfr_const_catalan (&(a->left), MPFI_RNDD); mpfr_const_catalan (&(a->right), MPFI_RNDU); return MPFI_FLAGS_BOTH_ENDPOINTS_INEXACT; }
num_t num_new_const_catalan(int flags) { num_t r; r = num_new_fp(flags, NULL); mpfr_const_catalan(F(r), round_mode); return r; }
int main() { long iter; flint_rand_t state; printf("const_catalan...."); fflush(stdout); flint_randinit(state); for (iter = 0; iter < 250; iter++) { arb_t r; mpfr_t s; long accuracy, prec; prec = 2 + n_randint(state, 1 << n_randint(state, 16)); arb_init(r); mpfr_init2(s, prec + 1000); arb_const_catalan(r, prec); mpfr_const_catalan(s, MPFR_RNDN); if (!arb_contains_mpfr(r, s)) { printf("FAIL: containment\n\n"); printf("prec = %ld\n", prec); printf("r = "); arb_printd(r, prec / 3.33); printf("\n\n"); abort(); } accuracy = arb_rel_accuracy_bits(r); if (accuracy < prec - 4) { printf("FAIL: poor accuracy\n\n"); printf("prec = %ld\n", prec); printf("r = "); arb_printd(r, prec / 3.33); printf("\n\n"); abort(); } arb_clear(r); mpfr_clear(s); } flint_randclear(state); flint_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }
SEXP const_asMpfr(SEXP I, SEXP prec, SEXP rnd_mode) { SEXP val; mpfr_t r; int i_p = asInteger(prec); R_mpfr_check_prec(i_p); mpfr_init2(r, i_p); switch(asInteger(I)) { case 1: mpfr_const_pi (r, R_rnd2MP(rnd_mode)); break; case 2: mpfr_const_euler (r, R_rnd2MP(rnd_mode)); break; case 3: mpfr_const_catalan(r, R_rnd2MP(rnd_mode)); break; case 4: mpfr_const_log2 (r, R_rnd2MP(rnd_mode)); break; default: error("invalid integer code {const_asMpfr()}"); /* -Wall */ } FINISH_1_RETURN(r, val); }
/* Wrapper for tgeneric */ static int my_const_catalan (mpfr_ptr x, mpfr_srcptr y, mpfr_rnd_t r) { return mpfr_const_catalan (x, r); }