/* Copyright 2010, 2012 Kevin Ryde This file is part of Math-NumSeq. Math-NumSeq is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Math-NumSeq is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Math-NumSeq. If not, see . */ #include #include #include int main (void) { { mpfr_t pi; mpz_t z; unsigned long bits = 1000000; unsigned long i, j, prev; mpfr_init2 (pi, bits); /* mpfr_const_pi (pi, GMP_RNDZ); */ mpfr_const_log2 (pi, GMP_RNDZ); mpfr_mul_2exp (pi, pi, bits-1, GMP_RNDZ); mpz_init (z); mpfr_get_z (z, pi, GMP_RNDZ); i = bits; j = 1; prev = 1; for (;;) { if (mpz_tstbit (z, i)) { printf ("%lu\n", j-prev); prev = j; } else { /* printf ("0"); */ } if (i == 0) break; i--; j++; } printf ("\n"); return 0; } { mpz_t total, num, q; unsigned long bits = 1000000; unsigned long k, den; /* quadratic in bits, about 125000 fracs to accumulate */ mpz_init_set_ui (total, 0); mpz_init_set_ui (num, 1); mpz_init (q); mpz_mul_2exp (num, num, bits); for (k = 0; ; k++) { den = 2*k + 1; /* printf("1 / 4**%-2lu * %2lu\n", k, den); */ mpz_div_ui (q, num, den); mpz_add (total, total, q); mpz_cdiv_q_2exp (num, num, 2); if (mpz_cmp_ui (num, den) < 0) { break; } } return 0; } { mpfr_t ln; unsigned long bits = 1000000; mpfr_init2 (ln, bits); mpfr_set_ui (ln, 3, GMP_RNDZ); mpfr_log (ln, ln, GMP_RNDZ); return 0; } }