📄 長 pi.mht
字号:
From: <由 Microsoft Internet Explorer 5 保存>
Subject: =?gb2312?B?6UwgUEk=?=
Date: Wed, 13 Sep 2006 01:14:54 +0800
MIME-Version: 1.0
Content-Type: multipart/related;
boundary="----=_NextPart_000_0094_01C6D6D2.055635D0";
type="text/html"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1807
This is a multi-part message in MIME format.
------=_NextPart_000_0094_01C6D6D2.055635D0
Content-Type: text/html;
charset="big5"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.java3z.com/cwbwebhome/article/article3/AlgorithmGossip/LongPI.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>=AA=F8 PI</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dbig5"><LINK=20
href=3D"http://www.java3z.com/cwbwebhome/article/article3/AlgorithmGossip=
/css/stdlayout.css"=20
type=3Dtext/css rel=3Dstylesheet><LINK=20
href=3D"http://www.java3z.com/cwbwebhome/article/article3/AlgorithmGossip=
/css/print.css"=20
type=3Dtext/css rel=3Dstylesheet>
<META content=3D"MSHTML 6.00.2800.1561" name=3DGENERATOR></HEAD>
<BODY>
<H3><A=20
href=3D"http://caterpillar.onlyfun.net/Gossip/index.html">http://caterpil=
lar.onlyfun.net/Gossip/index.html</A></H3>
<H1><A=20
href=3D"http://www.java3z.com/cwbwebhome/article/article3/AlgorithmGossip=
/AlgorithmGossip.htm">Algorithm=20
Gossip: =AA=F8 PI</A></H1>
<H2>=BB=A1=A9=FA</H2>=B6=EA=A9P=B2v=AB=E1=AA=BA=A4p=BC=C6=A6=EC=BC=C6=ACO=
=B5L=A4=EE=B9=D2=AA=BA=A1A=A6p=A6=F3=A8=CF=A5=CE=B9q=B8=A3=A8=D3=ADp=BA=E2=
=B3o=B5L=A4=EE=B9=D2=AA=BA=A4p=BC=C6=ACO=A4@=A8=C7=BC=C6=BE=C7=AEa=BBP=B5=
{=A6=A1=B3]=ADp=AEv=A9=D2=B7P=BF=B3=BD=EC=AA=BA=A1A=A6b=B3o=C3=E4=A4=B6=B2=
=D0=A4@=AD=D3=A4=BD=A6=A1=B0t=A6X <A=20
href=3D"http://www.java3z.com/cwbwebhome/article/article3/AlgorithmGossip=
/BigNumber.htm">=A4j=BC=C6=B9B=BA=E2</A>=A1A=A5i=A5H=ADp=BA=E2=AB=FC=A9w=A6=
=EC=BC=C6=AA=BA=B6=EA=A9P=B2v=A1C<BR>
<H2>=B8=D1=AAk</H2>=AD=BA=A5=FD=A4=B6=B2=D0J.Marchin=AA=BA=B6=EA=A9P=B2v=A4=
=BD=A6=A1=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">PI =3D [16/5=20
- 16 / (3*5<SUP>3</SUP>) + 16 / (5*5<SUP>5</SUP>) - 16 / =
(7*5<SUP>7</SUP>) +=20
......] -</SPAN><BR=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace"> =20
[4/239 - 4/(3*239<SUP>3</SUP>) +=20
4/(5*239<SUP>5</SUP>) - 4/(7*239<SUP>7</SUP>) +=20
......]</SPAN><BR></DIV><BR>=A5i=A5H=B1N=B3o=AD=D3=A4=BD=A6=A1=BE=E3=B2z=AC=
=B0=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">PI =3D [16/5=20
- 4/239] - [16/(5<SUP>3</SUP>) - 4/(239<SUP>3</SUP>)]/3+ =
[16/(5<SUP>5</SUP>) -=20
4/(239<SUP>5</SUP>)]/5 +=20
......</SPAN><BR></DIV><BR>=A4]=B4N=ACO=BB=A1=B2=C4n=B6=B5=A1A=ADY=AC=B0=A9=
_=BC=C6=ABh=AC=B0=A5=BF=BC=C6=A1A=AC=B0=B0=B8=BC=C6=ABh=AC=B0=ADt=BC=C6=A1=
A=A6=D3=B6=B5=BC=C6=AA=ED=A5=DC=A4=E8=A6=A1=AC=B0=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">[16/5<SUP>2*n-1</SUP>=20
- 4/239<SUP>2*n-1</SUP>] /=20
(2*n-1)</SPAN><BR></DIV><BR>=A6p=AAG=A7=DA=AD=CC=ADn=ADp=BA=E2=B6=EA=A9P=B2=
v=A6=DC10=AA=BA=ADtL=A6=B8=A4=E8=A1A=A5=D1=A9=F3[16/5<SUP>2*n-1</SUP> -=20
4/239<SUP>2*n-1</SUP>]=A4=A416/5<SUP>2*n-1</SUP>=A4=F14/239<SUP>2*n-1</SU=
P>=A8=D3=AA=BA=A4j=A1A=A8=E3=A6=B3=A8M=A9w=A9=CA=A1A=A9=D2=A5H=AA=ED=A5=DC=
=A6=DC=A4=D6=A5=B2=B6=B7=ADp=BA=E2=A6=DC=B2=C4n=B6=B5=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">[16/5<SUP>2*n-1</SUP>=20
] / (2*n-1) =3D =
10<SUP>-L</SUP></SPAN><BR></DIV><BR>=B1N=A4W=AD=B1=AA=BA=B5=A5=A6=A1=A8=FA=
log=A8=C3=B8g=B9L=A4=C6=C2=B2=A1A=A7=DA=AD=CC=A5i=A5H=A8D=B1o=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">n =3D L /=20
(2log5) =3D L / =
1.39794</SPAN><BR></DIV><BR>=A9=D2=A5H=ADY=ADn=A8D=BA=EB=BDT=AB=D7=A6=DC=A4=
p=BC=C6=AB=E1L=A6=EC=BC=C6=A1A=ABh=A5u=ADn=A8D=A6=DC=A4=BD=A6=A1=AA=BA=B2=
=C4n=B6=B5=A1A=A8=E4=A4=A4n=B5=A5=A9=F3=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">n =3D=20
[L/1.39794] +=20
1</SPAN><BR></DIV><BR>=A6b=A4W=A6=A1=A4=A4[]=AC=B0=B0=AA=B4=B5=B2=C5=B8=B9=
=A1A=A4]=B4N=ACO=A8=FA=A6=DC=BE=E3=BC=C6=A1]=A4=A3=A4j=A9=F3L/1.39794=AA=BA=
=BE=E3=BC=C6=A1^=A1F=AC=B0=A4F=ADp=C2=B2=A4=E8=ABK=A1A=A5i=A5H=A6b=B5{=A6=
=A1=A4=A4=A8=CF=A5=CE=A4U=AD=B1=B3o=AD=D3=A4=BD=A6=A1=A8=D3=ADp=C2=B2=B2=C4=
n=B6=B5=A1G<BR>
<DIV style=3D"MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">[</SPAN><BIG=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">W</BIG><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace"><SUB>n</SUB>-1/5</SPAN><SUP=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">2</SUP><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">-=20
</SPAN><BIG=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">V</BIG><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace"><SUB>n</SUB>-1=20
/ (239</SPAN><SUP=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">2</SUP><SPAN=20
style=3D"FONT-WEIGHT: bold; FONT-FAMILY: Courier =
New,Courier,monospace">)] /=20
(2*n-1)</SPAN><BR></DIV><BR>=B3o=AD=D3=A4=BD=A6=A1=AA=BA=BAt=BA=E2=AAk=B0=
t=A6X=A4j=BC=C6=B9B=BA=E2=A8=E7=A6=A1=AA=BA=BAt=BA=E2=AAk=AC=B0=A1G=20
<DIV style=3D"FONT-WEIGHT: bold; MARGIN-LEFT: 40px"><SPAN=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace">div(w, 25, w); =
</SPAN><BR=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace"><SPAN=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace">div(v, 239, v); =
</SPAN><BR=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace"><SPAN=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace">div(v, 239, v); =
</SPAN><BR=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace"><SPAN=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace">sub(w, v, q); =
</SPAN><BR=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace"><SPAN=20
style=3D"FONT-FAMILY: Courier New,Courier,monospace">div(q, 2*k-1, q)=20
</SPAN><BR></DIV> <BR>=A6=DC=A9=F3=A4j=BC=C6=B9B=BA=E2=AA=BA=BAt=BA=E2=
=AAk=A1A=BD=D0=B0=D1=A6=D2=A4=A7=ABe=AA=BA=A4=E5=B3=B9=A1A=A5=B2=B6=B7=AA=
`=B7N=AA=BA=ACO=A6b=BF=E9=A5X=AE=C9=A1A=A5=D1=A9=F3=ACO=BF=E9=A5X=B0}=A6C=
=A4=A4=AA=BA=BE=E3=BC=C6=AD=C8=A1A=A6p=AAG=B0}=A6C=A4=A4=BE=E3=BC=C6=A6=EC=
=BC=C6=A4=A3=BA=A1=A5|=A6=EC=A1A=ABh=A5=B2=B6=B7=B8=C9=A4W0=A1A=A6bC=BBy=A8=
=A5=A4=A4=A5u=ADn=A8=CF=A5=CE=AE=E6=A6=A1=AB=FC=A9w=A6r%04d=A1A=A8=CF=B1o=
=A4=A3=A8=AC=A6=EC=BC=C6=B3=A1=A5=F7=A6=DB=B0=CA=B8=C9=A4W0=A6A=BF=E9=A5X=
=A1A=A6=DC=A9=F3Java=AA=BA=B3=A1=A5=F7=A1A=A8=CF=A5=CE=20
NumberFormat=A8=D3=A7@=AE=E6=A6=A1=A4=C6=A1C<BR><BR>=B1z=A5i=A5H=B0=D1=A6=
=D2 <A href=3D"http://crd.lbl.gov/~dhbailey/">=B3o=AD=D3=BA=F4=AF=B8</A> =
=A6=B3=C3=F6=A9=F3=A5t=A4@=AD=D3=A5=CE=A4=BD=A6=A1=A8DPI=AA=BA=BB=A1=A9=FA=
=A1A=A5=A6=AA=BA=B9=EA=A7@=A6b <A=20
href=3D"http://crd.lbl.gov/~dhbailey/piqp.c">=B3o=C3=E4</A>=A1C<BR><BR>
<H2>=B9=EA=A7@</H2>
<UL>
<LI>C </LI></UL><PRE>#include <stdio.h> <BR>#define L 1000 =
<BR>#define N L/4+1 <BR><BR>// L =
=AC=B0=A6=EC=BC=C6=A1AN=ACOarray=AA=F8=AB=D7 <BR><BR>void add(int*, =
int*, int*); <BR>void sub(int*, int*, int*); <BR>void div(int*, int, =
int*); <BR><BR>int main(void) { <BR> int s[N+3] =3D {0}; <BR> int =
w[N+3] =3D {0}; <BR> int v[N+3] =3D {0}; <BR> int q[N+3] =3D {0}; =
<BR> int n =3D (int)(L/1.39793 + 1); <BR> int k; <BR><BR> w[0] =
=3D 16*5; <BR> v[0] =3D 4*239; <BR><BR> for(k =3D 1; k <=3D n; =
k++) { <BR> // =AEM=A5=CE=A4=BD=A6=A1 <BR> div(w, 25, w); =
<BR> div(v, 239, v); <BR> div(v, 239, v); <BR> =
sub(w, v, q); <BR> div(q, 2*k-1, q); <BR><BR> if(k%2) // =
=A9_=BC=C6=B6=B5 <BR> add(s, q, s); <BR> else // =
=B0=B8=BC=C6=B6=B5 <BR> sub(s, q, s); <BR> } <BR><BR> =
printf("%d.", s[0]); <BR> for(k =3D 1; k < N; k++) <BR> =
printf("%04d", s[k]); <BR> <BR> printf("\n"); <BR><BR> return =
0; <BR>} <BR><BR>void add(int *a, int *b, int *c) { <BR> int i, carry =
=3D 0; <BR><BR> for(i =3D N+1; i >=3D 0; i--) { <BR> c[i] =
=3D a[i] + b[i] + carry; <BR> if(c[i] < 10000) <BR> =
carry =3D 0; <BR> else { // =B6i=A6=EC <BR> c[i] =3D =
c[i] - 10000; <BR> carry =3D 1; <BR> } <BR> } <BR>} =
<BR><BR>void sub(int *a, int *b, int *c) { <BR> int i, borrow =3D 0; =
<BR><BR> for(i =3D N+1; i >=3D 0; i--) { <BR> c[i] =3D a[i] =
- b[i] - borrow; <BR> if(c[i] >=3D 0) <BR> borrow =
=3D 0; <BR> else { // =AD=C9=A6=EC <BR> c[i] =3D c[i] =
+ 10000; <BR> borrow =3D 1; <BR> } <BR> } <BR>} =
<BR><BR>void div(int *a, int b, int *c) { // b =AC=B0=B0=A3=BC=C6 <BR> =
int i, tmp, remain =3D 0; <BR><BR> for(i =3D 0; i <=3D N+1; i++) =
{ <BR> tmp =3D a[i] + remain; <BR> c[i] =3D tmp / b; <BR> =
remain =3D (tmp % b) * 10000; <BR> } <BR>} <BR></PRE><BR>
<UL>
<LI>Java </LI></UL><PRE>import java.text.NumberFormat;<BR><BR>public =
class LongPI {<BR> public static void main(String[] args) {<BR> =
final int L =3D 1000;<BR> final int N =3D L/4+1;<BR> =
int[] s =3D new int[N+3];<BR> int[] w =3D new int[N+3];<BR> =
int[] v =3D new int[N+3];<BR> int[] q =3D new int[N+3];<BR><BR> =
int n =3D (int)(L/1.39793 + 1); <BR> <BR> w[0] =3D =
16*5; <BR> v[0] =3D 4*239; <BR> <BR> for(int k =3D =
1; k <=3D n; k++) { <BR> // =AEM=A5=CE=A4=BD=A6=A1 <BR> =
w =3D BigNumber.div(w, 25); <BR> v =3D =
BigNumber.div(v, 239); <BR> v =3D BigNumber.div(v, 239);<BR> =
q =3D BigNumber.sub(w, v); <BR> q =3D =
BigNumber.div(q, 2*k-1); <BR><BR> if(k % 2 =3D=3D 1) // =
=A9_=BC=C6=B6=B5 <BR> s =3D BigNumber.add(s, q); <BR> =
else // =B0=B8=BC=C6=B6=B5 <BR> s =3D =
BigNumber.sub(s, q);<BR> } <BR> <BR> NumberFormat =
nf =3D NumberFormat.getInstance();<BR> =
nf.setMinimumIntegerDigits(4);<BR> <BR> =
System.out.print(s[0] + "."); <BR> for(int k =3D 1; k < N; =
k++) <BR> System.out.print(nf.format(s[k])); <BR> <BR> =
System.out.println(); <BR> =
}<BR>}</PRE><BR><BR><BR></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -