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 fprintarf(FILE *fp,const arf_t x) { static int init; static fmpz_t m,e; if (!init) { fmpz_init(m); fmpz_init(e); init = 1; } arf_get_fmpz_2exp(m,e,x); fmpz_fprint(fp,m); fprintf(fp," "); fmpz_fprint(fp,e); }
int _fmpz_vec_fprint(FILE * file, const fmpz * vec, long len) { int r; long i; r = fprintf(file, "%li", len); if ((len > 0) && (r > 0)) { r = fputc(' ', file); for (i = 0; (i < len) && (r > 0); i++) { r = fputc(' ', file); if (r > 0) r = fmpz_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; }
int main(void) { int i, j, n = 10000, result; flint_rand_t state; FILE *in, *out; int fd[2]; pid_t childpid; printf("print/ read...."); fflush(stdout); flint_randinit(state); /* Randomise n integers, write to and read from a pipe */ { fmpz *a; a = flint_calloc(n, sizeof(fmpz)); for (i = 0; i < n; i++) fmpz_randtest(a + i, state, 200); if (pipe(fd)) { printf("FAIL:\n"); printf("Failed to set-up the pipe.\n"); abort(); } if((childpid = fork()) == -1) { printf("FAIL:\n"); printf("Failed to fork the process.\n"); abort(); } if(childpid == 0) /* Child process */ { int r; close(fd[0]); out = fdopen(fd[1], "w"); if (out == NULL) { printf("FAIL:\n"); printf("Could not open output file at the pipe.\n"); abort(); } for (j = 0; j < n; j++) { r = fmpz_fprint(out, a + j); if ((j < n - 1) && (r > 0)) r = fprintf(out, "\n"); if (r <= 0) { printf("FAIL:\n"); printf("Write error.\n"); abort(); } } fclose(out); exit(0); } else /* Parent process */ { int r; fmpz_t t; close(fd[1]); in = fdopen(fd[0], "r"); if (in == NULL) { printf("FAIL:\n"); printf("Could not open input file at the pipe.\n"); abort(); } fmpz_init(t); i = 0; while (!feof(in)) { r = fmpz_fread(in, t); if (r <= 0) { printf("FAIL:\n"); printf("Read error.\n"); abort(); } result = fmpz_equal(t, a + i); if (!result) { printf("FAIL:\n"); printf("a[i] = "), fmpz_print(a + i), printf("\n"); printf("t = "), fmpz_print(t), printf("\n"); abort(); } ++i; } fmpz_clear(t); fclose(in); } if (i != n) { printf("FAIL:\n"); printf("Only %d out of %d objects were processed.\n", i, n); abort(); } for (i = 0; i < n; i++) fmpz_clear(a + i); flint_free(a); } /* Write bad data to a pipe and read it */ { char str[5] = {'b', 'l', 'a', 'h', '\0'}; if (pipe(fd)) { printf("FAIL:\n"); printf("Failed to set-up the pipe.\n"); abort(); } if((childpid = fork()) == -1) { printf("FAIL:\n"); printf("Failed to fork the process.\n"); abort(); } if(childpid == 0) /* Child process */ { int r; close(fd[0]); out = fdopen(fd[1], "w"); if (out == NULL) { printf("FAIL:\n"); printf("Could not open output file at the pipe.\n"); abort(); } r = fprintf(out, "blah"); if (r <= 0) { printf("FAIL:\n"); printf("Write error.\n"); abort(); } fclose(out); exit(0); } else /* Parent process */ { int r; fmpz_t t; close(fd[1]); in = fdopen(fd[0], "r"); if (in == NULL) { printf("FAIL:\n"); printf("Could not open input file at the pipe.\n"); abort(); } fmpz_init(t); i = 0; while (!feof(in)) { r = fmpz_fread(in, t); if (r > 0) { printf("FAIL:\n"); printf("r = %d\n", r); abort(); } ++i; } fmpz_clear(t); fclose(in); } /* For {'b','l','a','h','\0'} we expect 5 reads */ if (i != 5) { printf("FAIL:\n"); printf("Carried out %d reads, but \"%s\" has only 4 characters.\n", i, str); abort(); } } flint_randclear(state); _fmpz_cleanup(); printf("PASS\n"); return EXIT_SUCCESS; }