Patched memory leak.
[frac.git] / pi2.c
blob501f0eb7dc42a83351c865beb6de15dbdd2a43b6
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <gmp.h>
4 #include "cf.h"
6 // Converges extremely slowly. Not worth converting to decimal or
7 // continued fraction form.
8 static void *pi_six_sequence(cf_t cf) {
9 mpz_t num, denom, t;
10 mpz_init(num);
11 mpz_init(denom);
12 mpz_init(t);
14 mpz_set_ui(denom, 3);
15 cf_put(cf, denom);
17 mpz_set_ui(num, 1);
18 cf_put(cf, num);
19 mpz_set_ui(t, 8);
21 mpz_set_ui(denom, 6);
22 while(cf_wait(cf)) {
23 cf_put(cf, denom);
24 mpz_add(num, num, t);
25 cf_put(cf, num);
26 mpz_add_ui(t, t, 8);
29 mpz_clear(num);
30 mpz_clear(denom);
31 mpz_clear(t);
32 return NULL;
35 int main() {
36 mpz_t z;
37 mpz_t a, b, c, d;
38 mpz_init(z);
39 cf_t pi, conv;
40 pi = cf_new(pi_six_sequence, NULL);
41 mpz_init(a); mpz_init(b); mpz_init(c); mpz_init(d);
42 mpz_set_ui(a, 1); mpz_set_ui(b, 0);
43 mpz_set_ui(c, 0); mpz_set_ui(d, 1);
45 conv = cf_new_nonregular_mobius_to_decimal(pi, a, b, c, d);
46 for (int i = 1; i <= 5000; i++) {
47 cf_get(z, conv);
48 gmp_printf("%Zd\n",z);
50 printf("\n");
51 cf_free(conv);
52 cf_free(pi);
53 mpz_clear(z);
54 mpz_clear(d); mpz_clear(c); mpz_clear(b); mpz_clear(a);
55 return 0;