1 // Compute 37 digits of sqrt(2).
6 int main(int argc
, char **argv
) {
7 // 4 byte precision gives 18 digits,
8 // 8 byte precision gives 37 digits.
14 unsigned long long p0
, p1
, q0
, q1
, r0
, r1
;
16 // sqrt(2) = [1; 2, 2, ...]
17 // Handle first term here.
22 // Continued fraction recurrence relations.
31 // digit <- floor(p0 / q0)
32 // r0 = q0 * (digit + 1)
33 // r1 = q1 * (digit + 1)
37 while (digit
< 9 && r0
<= p0
) {
52 // p0 <- 10 * p0, p1 <- 10 * p1
53 p0
= ((p0
<< 2) + p0
) << 1;
54 p1
= ((p1
<< 2) + p1
) << 1;