void custom_rate_mixture_get_prob(arb_t prob, const custom_rate_mixture_t x, slong idx, slong prec) { if (x->mode == RATE_MIXTURE_UNDEFINED) { flint_fprintf(stderr, "internal error: undefined rate mixture\n"); abort(); } else if (x->mode == RATE_MIXTURE_NONE) { arb_one(prob); } else if (x->mode == RATE_MIXTURE_UNIFORM) { /* * This code branch involves a division that could * unnecessarily lose exactness in some situations. */ arb_set_si(prob, x->n); arb_inv(prob, prob, prec); } else if (x->mode == RATE_MIXTURE_CUSTOM) { arb_set_d(prob, x->prior[idx]); } else { flint_fprintf(stderr, "internal error: " "unrecognized rate mixture mode\n"); abort(); } }
slong rate_mixture_category_count(const rate_mixture_t x) { if (x->mode == RATE_MIXTURE_UNDEFINED) { flint_fprintf(stderr, "internal error: undefined rate mixture\n"); abort(); } else if (x->mode == RATE_MIXTURE_NONE) { return 1; } else if (x->mode == RATE_MIXTURE_UNIFORM || x->mode == RATE_MIXTURE_CUSTOM) { return x->custom_mix->n; } else if (x->mode == RATE_MIXTURE_GAMMA || x->mode == RATE_MIXTURE_GAMMA_MEDIAN) { return gamma_rate_mixture_category_count(x->gamma_mix); } else { flint_fprintf(stderr, "internal error: " "unrecognized rate mixture mode\n"); abort(); } }
void arb_fprintn(FILE * file, const arb_t x, slong digits, ulong flags) { char * s = arb_get_str(x, digits, flags); flint_fprintf(file, "%s", s); flint_free(s); }
void arb_fprintd(FILE * file, const arb_t x, slong digits) { arf_fprintd(file, arb_midref(x), FLINT_MAX(digits, 1)); flint_fprintf(file, " +/- "); mag_fprintd(file, arb_radref(x), 5); }
void arb_fprint(FILE * file, const arb_t x) { arf_fprint(file, arb_midref(x)); flint_fprintf(file, " +/- "); mag_fprint(file, arb_radref(x)); }
void custom_rate_mixture_expectation(arb_t rate, const custom_rate_mixture_t x, slong prec) { if (x->mode == RATE_MIXTURE_UNDEFINED) { flint_fprintf(stderr, "internal error: undefined rate mixture\n"); abort(); } else if (x->mode == RATE_MIXTURE_NONE) { arb_one(rate); } else if (x->mode == RATE_MIXTURE_UNIFORM || x->mode == RATE_MIXTURE_CUSTOM) { slong i; arb_t tmp, tmpb; arb_init(tmp); arb_init(tmpb); arb_zero(rate); if (x->mode == RATE_MIXTURE_UNIFORM) { for (i = 0; i < x->n; i++) { arb_set_d(tmp, x->rates[i]); arb_add(rate, rate, tmp, prec); } arb_div_si(rate, rate, x->n, prec); } else if (x->mode == RATE_MIXTURE_CUSTOM) { for (i = 0; i < x->n; i++) { arb_set_d(tmp, x->rates[i]); arb_set_d(tmpb, x->prior[i]); arb_addmul(rate, tmp, tmpb, prec); } } arb_clear(tmp); arb_clear(tmpb); } else { flint_fprintf(stderr, "internal error: " "unrecognized rate mixture mode\n"); abort(); } }
void arf_fprint(FILE * file, const arf_t x) { if (arf_is_normal(x)) { fmpz_t man, exp; fmpz_init(man); fmpz_init(exp); arf_get_fmpz_2exp(man, exp, x); flint_fprintf(file, "("); fmpz_fprint(file, man); flint_fprintf(file, " * 2^"); fmpz_fprint(file, exp); flint_fprintf(file, ")"); fmpz_clear(man); fmpz_clear(exp); } else { if (arf_is_zero(x)) flint_fprintf(file, "(0)"); else if (arf_is_pos_inf(x)) flint_fprintf(file, "(+inf)"); else if (arf_is_neg_inf(x)) flint_fprintf(file, "(-inf)"); else flint_fprintf(file, "(nan)"); } }
void custom_rate_mixture_get_rate(arb_t rate, const custom_rate_mixture_t x, slong idx) { if (x->mode == RATE_MIXTURE_UNDEFINED) { flint_fprintf(stderr, "internal error: undefined rate mixture\n"); abort(); } else if (x->mode == RATE_MIXTURE_NONE) { arb_one(rate); } else if (x->mode == RATE_MIXTURE_UNIFORM || x->mode == RATE_MIXTURE_CUSTOM) { arb_set_d(rate, x->rates[idx]); } else { flint_fprintf(stderr, "internal error: " "unrecognized rate mixture mode\n"); abort(); } }
int _padic_poly_fprint(FILE *file, const fmpz *poly, slong val, slong len, const padic_ctx_t ctx) { slong i, v; fmpz_t u; if (len == 0) { flint_fprintf(file, "0"); return 1; } fmpz_init(u); flint_fprintf(file, "%wd ", len); for (i = 0; i < len; i++) { flint_fprintf(file, " "); if (fmpz_is_zero(poly + i)) { flint_fprintf(file, "0"); } else { v = val + fmpz_remove(u, poly + i, ctx->p); _padic_fprint(file, u, v, ctx); } } fmpz_clear(u); return 1; }
int _fmpq_vec_fprint(FILE * file, const fmpq * vec, slong len) { int r; slong i; // r = flint_fprintf(file, "%li", len); flint_fprintf(file, "%li", len); r = 1; if ((len > 0) && (r > 0)) { r = fputc(' ', file); for (i = 0; (i < len) && (r > 0); i++) { r = fputc(' ', file); if (r > 0) // r = fmpq_fprint(file, vec + i); fmpq_fprint(file, vec + i); } } return r; }
int main(int argc, char *argv[]) { slong i, len, prec, num_threads; char * out_file; arb_ptr z; if (argc < 2) { flint_printf("keiper_li n [-prec prec] [-threads num_threads] [-out out_file]\n"); return 1; } len = atol(argv[1]) + 1; prec = 1.1 * len + 50; num_threads = 1; out_file = NULL; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-prec")) prec = atol(argv[i+1]); else if (!strcmp(argv[i], "-threads")) num_threads = atol(argv[i+1]); else if (!strcmp(argv[i], "-out")) out_file = argv[i+1]; } flint_set_num_threads(num_threads); z = _arb_vec_init(len); keiper_li_series(z, len, prec); for (i = 0; i < len; i++) { if (i <= 10 || len - i <= 10) { flint_printf("%wd: ", i); arb_printd(z + i, 50); flint_printf("\n"); } } SHOW_MEMORY_USAGE if (out_file != NULL) { fmpz_t man, exp; arf_t t; FILE * fp = fopen(out_file, "w"); fmpz_init(man); fmpz_init(exp); arf_init(t); for (i = 0; i < len; i++) { arf_get_fmpz_2exp(man, exp, arb_midref(z + i)); flint_fprintf(fp, "%wd ", i); fmpz_fprint(fp, man); flint_fprintf(fp, " "); fmpz_fprint(fp, exp); flint_fprintf(fp, " "); arf_set_mag(t, arb_radref(z + i)); arf_get_fmpz_2exp(man, exp, t); fmpz_fprint(fp, man); flint_fprintf(fp, " "); fmpz_fprint(fp, exp); flint_fprintf(fp, "\n"); } fclose(fp); fmpz_clear(man); fmpz_clear(exp); arf_clear(t); } _arb_vec_clear(z, len); flint_cleanup(); return 0; }