円周率

Last-modified: 2008-07-03 (木) 21:27:21

文字通り,円周率3.14...を2400桁まで計算するプログラムです.
なぜ,これをSASで?
それは,ですね..

****************************************************
* pi.sas
* piの2400桁を計算
* 20050805 翔
* program size = 300byte = 2400bit
* output 2400桁*3.32 = 7972bit
****************************************************;

data pi;
  array f(8401) f1-f8401;
  a=10000;
  c=8400;
  b=1;
  e=0;
  do while (b ne c+1);
    f(b)=int(a/5);
	b=b+1;
  end;
  do while (c>0);
    g=2*c;
	d=0;
	b=c;
	do while (b>0);
	  d=d+f(b)*a;
	  g=g-1;
	  f(b)=mod(d,g);
	  d=int(d/g);
	  g=g-1;
	  b=b-1;
	  if (b ne 0) then d=d*b;
    end;
    c=c-14;
    x=e+int(d/a);
	put x z4. @;
	e=mod(d,a);
  end;
run;

/*
3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930
3819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519
4151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481
8467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059
7317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278
7661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040
0927701671139009848824012858361603563707660104710181942955596198946767837449448255379774726847104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247
4964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278
6255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049
4601653466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285022210661186306744278622039194945047123713786960956364371917287467764657
5739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098
5838741059788595977297549893016175392846813826868386894277415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944
169486855584840635342207222582848864815845602850

 */