برنامه امضاء محاسبهٔ عدد Pi تا ۱۵۰۰۰ رقم اعشار

دربارهٔ برنامه‌های امضاء قبلا در این صفحه توضیحاتی داده شد. برنامه امضاء زیر، تا ۸۰۰ رقم اعشار عدد 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