دربارهٔ برنامههای امضاء قبلا در این صفحه توضیحاتی داده شد. برنامه امضاء زیر، تا ۸۰۰ رقم اعشار عدد Pi را چاپ میکند:
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c
-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
برنامهٔ بالا را بشکل زیر نیز میتوان نوشت:
#include <stdio.h>
int main()
{
int r[2800 + 1];
int i, k;
int b, d;
int c = 0;
for(i = 0; i < 2800; i++)
{
r[i] = 2000;
}
for(k = 2800; k > 0; k -= 14)
{
d = 0;
i = k;
for(;;)
{
d += r[i] * 10000;
b = 2 * i - 1;
r[i] = d % b;
d /= b;
i--;
if(i == 0) break;
d *= i;
}
printf("%.4d", c + d / 10000);
c = d % 10000;
}
return 0;
}
برنامه امضاء زیر، تا ۱۵۰۰۰ رقم اعشار عدد Pi را چاپ میکند:
a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",
e+d/f))for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}
دربارهٔ نحوهٔ عملکرد و الگوریتم مورد استفاده در این برنامهها، میتوانید فایل PDF زیر را مطالعه کنید.
Unbounded Spigot Algorithms for the Digits of Pi:
MD5 checksum:
1fa62cd21685042f9a015a384ec836a2 *spigot.pdf