Spigot

From Wiki

Jump to: navigation, search

\begin{align}
{\pi\over2} &= \sum^\infty_{k=0} {k!\over(2k+1)!!} \\
&= 1 + {1\over3} + {1\cdot2\over3\cdot5} + {1\cdot2\cdot3\over3\cdot5\cdot7} + {1\cdot2\cdot3\cdot4\over3\cdot5\cdot7\cdot9}+\cdots \\
&= 1 + {1\over3}\left(1+{2\over5}\left(1+{3\over7}\left(1+{4\over9}(1+\cdots)\right)\right)\right) \\
&= (1; 1, 1, 1, 1, \cdots)_{({1\over3}, {2\over5}, {3\over7}, {4\over9}, \cdots)}
\end{align}


\begin{align}
\pi &= (2; 2, 2, 2, 2, \cdots)_{({1\over3}, {2\over5}, {3\over7}, {4\over9}, \cdots)}
\end{align}

Algorithm

for(i=0;i<NUM;i++) a[i]=2;
for(loop=0;loop<DIGITS;loop++) {
	for(i=0;i<NUM;i++) a[i]*=10;
	for(i=NUM-1;i>=1;i--) {
		a[i]/(i*2+1)   ->   quotient,remainder
		a[i]=remainder;
		a[i-1]+=quotient*i;
	}
	output(a[0]/10);
	a[0]%=10;
}

Runthrough (NUM=10, DIGITS=3)

0	1	2	3	4	5	6	7	8	9	i
1	3	5	7	9	11	13	15	17	19	(i*2+1)
---------------------------------------------------------------------------
2	2	2	2	2	2	2	2	2	2	a
20	20	20	20	20	20	20	20	20	20	a
0	2	2	4	3	10	1	13	12	1	a
3
0	20	20	40	30	100	10	130	120	10	a
3	1	3	3	0	10	3	6	1	10	a
1
30	10	30	30	0	100	30	60	10	100	a
0	0	1	5	1	9	0	9	4	5	a
4

Sources