10201 怎樣算$\pi$

#### 終極密碼

★ 終極密碼為0到100之間 ★

Add, Sub, Mul 和 Divl 諸模組作萬進位小數的四則計算, 我們只作下文所需的運算, 因此沒有計算兩個長實數的積和商。 這種計算可以留給諸位作為程式設計的線習。

                              THE PROGRAM
program Meise1 ( input,tx)；

{ Meise1's algorithm to compute pi:
pi = 8 arctan 1/10 - arctan 1/239 -4 arctan 1/515
Programmed by Ju-kwei Wang.                                    }

const TenThousand=10000；
QdPlaces-252;
type long=array[0..QdPlaces] of integer；
var tx:text;
one, refsult,summand, pi: long;
i:iriteger;

procedure WriteWhere(var t:text);
{This procedure decides where to place the output}
var ans: char;
Filespec: string[14];
begin
write('P(rinter, V(ideo or F(i]e output?');
repeat read(kbd, ans) unti1 ans in ['p','v','f','P','V','F'];
case ans of
'P','P': assign(t, 'LST:');
'v','V': begin
assign(t,'CON:');
clrscr;
writeln
end;
'f','F'： begin
write('Filespec:');
assign(t,Filespec)
end
end; {case}
rewrite(t)
end;

procedure outp(a:long);
var i:integer;
begin
write(tx,a[0]:4,'.');
for i:=l to QdPlaces-2 do begin
if a[i]>999 then write(tx,a[i]:4,' ')
else if a[i]>99 then write(tx,'0',a[i]:3,' ')
else if a[i]>9 then write(tx,'00',a[i]:2,' ')
else write(tx,'000',a[i]:1,' ');
if (i+1) mod 15=0 then writeln(tx)
end;
writeln(tx)；
writeln(tx)
end;

var i:integer；
begin
for i:=0 to QdPlaces do sum[i]:=a[i]+b[i]；
for i:=QdPlaces downto 1 do if sum[i]>=TenThousand then begin
sum[i]:=sum[i]-TenThousand;
sum[i-1]：=sum[i-1]+1
end
end;

procedure sub(a,b:long；var diff:long);
var i :integer;
begin
for i:=0 to QdPlaces do diff[i]:=a[i]-b[i];
for i:=QdPiaces downto 1 do if diff[ij <0 then begin
diff[i]:=diff[i]+TenThousand;
diff[i-1]:=diff[i-1]-1
end
end;

procedure mul(a:long; n:integer; var prod:long);
x:real;
begin
for i:=QdPlaces downto 1 do begin
end;
end;

procedure divl(a:long; n:integer; var qo:long)；
var i:integer;
x:real;
begin
x:=a[0];
for i:=0 to QdPlaces-1 do begin
qot[i]:=trunc(x/n);
x:=(x-1*0*qot[i]*n)*TenThousand+a[i+1]
end;
qot[QdPlaces]:=trunc(x/n)
end;

function log(n:integer):regl;
begin
log:=ln(1.0*n)/1n(10.0)
end;

function TermNo(n,a：integer)：integer;
{ How many terms does one need to compute arctan 1/n so that the result
is correct to a decimal places? }
var m:integer;
x:real;
begin
m:=trunc((a+l)/log(n))+1；
while log(n)*(2*m+1)+log(2*m+1) > a+1-log(5) do m: =m-1;
TermNo:=m+1
end;

procedure invtan (n:integer； var atn: long);
{atn = arctan 1/n by MacLaurin series to m terms}
var m,nSq,i:integer;
pwr,trm:long;

begin
divl(one,n,pwr);
atn:=pwr;
m:=TermNo(n,4*QdPlaces);
if n>108 then for i:=1 to m do begin
divl(pwr,n,trm);
divl(trm,n,pwr);
divl(pwr, 2*i+1,trm);
if odd(i) then sub (atn, trm, atn) else add(atn ,trm, atn)
end else begin
nSq:=n*n;
for i:=1 to m do begin
divl(pwr,nSq,trm);
pwr:=trm;
divl(pwr,2*i+l,trm);
if odd(i) then sub (atn, trm atn) else add(atn, trm, atn)
end
end
end;

begin
one[0]:=1;
for i:=1 to QdPlaces do one[i]:=0;
TextBackground(blue);
TextColor(LightMagenta);
clrscr;
WriteWhere(tx);
invtan(10,result);
writeln (tx,'arctan 1/10 =')；outp(result);
mul(result,32,pi);
invtan(239,result);
writeln(tx,'arctan 1/239 =');outp(result);
mul(result,4,summand);
sub(pi,summand,pi);
invtan(515,result);
writeln(tx,'arctan 1/515 =');outp(result);
mul(result,16,summand);
sub(pi,summand,pi);
writeln(tx,'pi'='); outp(pi);
close(tx)
end・

                              THE OUTPUT
arctan 1/10 =
0.0396 6865 2491 1620 2737 8446 1198 7802 0590 2432 7832 2504 3146 4801
5508 7768 1002 7747 4475 5065 4420 6126 2443 4286 3715 7955 8386 4088 2739
8969 5679 2706 6563 1569 1279 0302 0720 8528 3902 8312 4322 3413 1452 0899
9120 3117 7645 1880 7542 7113 8281 1288 2359 3605 1731 1328 0153 5327 4276
6156 3882 5823 5491 4853 2458 7272 1476 0662 8140 5298 9463 7174 9699 7574
7101 4359 6227 3736 4575 2379 9778 0795 2648 9347 2492 9628 1854 9098 8357
0529 6856 4858 4916 2407 1550 0922 7014 3997 1745 5311 3784 8904 7538 9119
6646 5570 9523 9507 2692 0497 5355 0270 0220 9240 7194 9393 9323 5771 9184
0717 8695 9221 5984 8828 3363 3310 2491 1444 5127 5118 7074 0166 4303 8293
1083 0089 1901 7716 5321 2275 3913 1671 4214 0417 0455 9491 7296 5694 8052
2593 2178 2056 1144 7695 7767 9157 2075 2408 4060 9141 3778 0643 1803 1790
7809 3812 3279 1593 8266 4054 1140 3984 6766 8319 8180 3959 2521 6005 4106
5270 9824 3563 7314 3136 7097 6752 4114 4531 5933 0006 7415 6728 7565 8425
9304 6214 6327 3018 3990 0018 6663 9306 2097 5055 5237 6351 2328 3681 8403
8223 7057 7903 5281 4738 1287 5664 3645 8264 5611 9169 5171 1686 9735 3318
8378 0600 0792 6636 7362 3526 8794 4206 0269 9244 3332 0755 7332 0047 0228
2987 2557 4646 0128 5061 4702 6067 0701 4040 4795 2889

arctan 1/239 =
0.0041 8407 6002 0747 2386 4538 2149 5928 5452 7410 4806 5307 6319 5082
7019 6128 8718 1778 3414 2289 3273 7826 0581 3622 9094 5497 5450 6664 4486
3756 0524 5839 4789 3118 6505 8922 1288 3309 2800 8462 7196 2330 7733 7594
7634 6033 1847 3414 5703 3198 6015 4548 1480 5992 4498 3021 1460 3912 5394
9527 6077 9688 1558 8812 7339 7953 3465 1804 5742 5481 3586 7464 4751 9791
0232 8309 7700 2064 6528 2763 4653 2969 1048 1838 6543 5607 8919 5914 5123
2220 9446 3686 2766 1552 0831 6796 4264 6574 6551 1032 5103 4352 6282 4451
2693 5567 0499 6844 4524 7904 3317 7283 9307 0863 1401 9386 9519 5037 0586
4107 7085 5855 4045 2235 5388 1423 7677 0836 5156 9182 5270 2002 2930 8954
4950 0435 8544 0934 4964 4014 2418 7249 5092 2838 6239 5455 3335 6511 7197
3747 0202 3494 7597 7909 7469 5011 1888 5476 6739 7957 3153 7093 0327 8211
3089 8425 8308 3677 1909 1008 3909 8516 5510 4192 2416 7809 2053 2686 4916
2667 4027 1684 4424 4773 1579 6452 0275 4957 4158 8258 2909 4058 5090 3820
7331 7590 8431 9977 8432 7604 2858 6383 7347 4688 2493 4807 6992 8733 1405
2238 9423 0869 0507 3039 5440 6912 5801 0248 6061 6072 3699 5039 10S4 7488
1561 7625 8645 5122 5901 5542 9569 7941 6157 1069 4111 3503 6698 7619 4315
5931 8681 7207 4076 9131 0279 7191 2912 2049 3392 1211

arctan 1/515 =
0.0019 4174 5132 4432 9638 6842 4745 6125 0887 0389 7154 1220 7771 9451
3328 6133 7902 1524 9168 5752 3108 5274 2083 1284 6990 4648 8654 7439 6343
7834 6793 7424 6332 0744 6983 3038 6489 5426 4535 6102 7569 9824 7259 1644
2234 4949 3435 1098 1828 1040 7281 5932 5750 6591 3933 8597 7713 9530 6037
0984 2451 1723 1271 6472 9539 2364 6867 9559 1450 0072 4197 0383 3673 8644
5315 0563 9360 9043 8571 1642 9962 7397 6779 8058 0066 2281 1769 6489 1104
6106 6344 2979 5981 6413 4976 5059 7870 7901 0508 8108 7337 3141 9528 6129
0622 6567 5259 7467 0545 0195 2811 5519 9689 6111 7551 9173 9419 3189 6435
5863 5063 4301 7322 0215 3197 5649 9517 1664 6424 7539 8542 8495 1033 4377
4382 4325 2278 8958 1311 5404 9062 9519 7303 1800 8881 7715 4083 0719 3871
392b 9305 4087 7443 5124 3913 2825 0071 2555 4075 0287 6932 4689 4323 4850
9789 9752 6022 2884 1962 0447 5612 6595 0408 0012 8929 3828 5782 6269 1177
6002 5601 8991 2387 5196 6114 3468 6091 3070 5907 0941 8166 4942 9875 9783
8654 36Z  2223 2741 3311 6145 0424 1729 3262 2257 2162 7484 7764 2522 0552
0572 9721 1019 8675 4335 1195 3485 6620 8425 7987 6065 7033 5825 5963 4333
4659 2C44 7839 6341 0277 1488 4498 9199 8601 3074 2019 0674 5991 9575 5266
5708 7837 4822 6324 4713 9786 0548 1177 3136 0216 2851

pi =
3.1415 9265 3589 7932 3846 2643 3832 7950 2884 1971 6939 9375 1058 2097
4944 5923 0781 6406 2862 0899 8628 0348 2534 2117 0679 8214 8086 5132 8230
6647 0938 4460 9550 5822 3172 5359 4081 2848 1117 4502 8410 2701 9385 2110
5559 6446 2294 8954 9303 8196 4428 8109 7566 5933 4461 2847 5648 2337 8678
3165 2712 0190 9145 6485 6692 3460 3486 1045 4326 6482 1339 3607 2602 4914
1273 7245 8700 6606 3155 8817 4881 5209 2096 2829 2540 9171 5364 3678 9259
0360 0113 3053 0548 8204 6652 1384 1469 5194 1511 6094 3305 7270 3657 5959
1953 0921 8611 7381 9326 1179 3105 1185 4807 4462 3799 6274 9567 3518 8575
2724 8912 2793 8183 0119 4912 9833 6733 6244 0656 6430 8602 1394 9463 9522
4737 1907 0217 9860 9437 0277 0539 2171 7629 3176 7523 8467 4818 4676 6940
5132 0005 6812 7145 2635 6082 7785 7713 4275 7789 6091 7363 7178 7214 6844
0901 2249 5343 0146 5495 8537 1050 7922 7968 9258 9235 4201 9956 1121 2902
1960 8640 3441 8159 8136 2977 4771 3099 6051 8707 2113 4999 9998 3729 7804
9951 0597 3173 2816 0963 1859 5024 4594 5534 6908 3026 4252 2308 2533 4468
5035 2619 3118 8171 0100 0313 7838 7528 8658 7533 2083 8142 0617 1776 6914
7303 5982 5349 0428 7554 6873 1159 5628 6388 2353 7875 9375 1957 7818 5778
0532 1712 2680 6613 0019 2787 6611 1959 0921 6420 1989



---本文作者現任教於國立中央大學數學系---