5 static void *convergent(cf_t cf
) {
6 cf_t input
= cf_data(cf
);
9 mpz_init(pold
); mpz_init(p
); mpz_init(pnew
);
10 mpz_init(qold
); mpz_init(q
); mpz_init(qnew
);
11 mpz_set_ui(pold
, 0); mpz_set_ui(p
, 1);
12 mpz_set_ui(qold
, 1); mpz_set_ui(q
, 0);
18 mpz_mul(pnew
, p
, denom
);
19 mpz_add(pnew
, pnew
, pold
);
20 mpz_mul(qnew
, q
, denom
);
21 mpz_add(qnew
, qnew
, qold
);
25 mpz_set(pold
, p
); mpz_set(p
, pnew
);
26 mpz_set(qold
, q
); mpz_set(q
, qnew
);
29 mpz_clear(pold
); mpz_clear(p
); mpz_clear(pnew
);
30 mpz_clear(qold
); mpz_clear(q
); mpz_clear(qnew
);
33 cf_t
cf_new_convergent(cf_t a
) {
34 return cf_new(convergent
, a
);