?? tiji.cpp
字號:
#include<stdio.h>
#include<math.h>
int I[101][10]; //用于存放遞推得到的余數(shù),前一個指標表示維數(shù)
double w[101]; //用于存放當前產(chǎn)生的隨機點的各維坐標
int N; //表示總維數(shù)
int a=16807,r=2836;
long int m=2147483647,q=127773;
int N0=10000000; //投石總數(shù),一千萬個點,為保證精度在1%內(nèi)
int N1=0; //N維球內(nèi)點的總數(shù)
double V0; //N維正方體體積
double V; //N維單位球體積
main()
{double distance(int k);
int rand(int z);
int i,j;
printf("輸入總維數(shù)\n");
scanf("%d",&N);
printf("維數(shù)為:%d\n",N);
printf("輸入各維的隨機數(shù)種子(正整數(shù))\n");
for(i=1;i<=N;i++)
{
printf("第%d維種子:",i);
scanf("%d",&I[i][0]);
printf("\n");
}
for(i=1;i<=N0;i++)//投石的個數(shù)(每個石子實際包括d個隨機數(shù),即d維座標)
{
for(j=1;j<=N;j++)//j表示維數(shù)
{
I[j][1]=rand(I[j][0]);
w[j]=2*(double(I[j][1])/double(m))-1;//產(chǎn)生隨機數(shù)
}
if(distance(N)<1) N1++;
for(j=1;j<=N;j++)
{
I[j][0]=I[j][1];
}
}
V0=1.0;
for(i=1;i<=N;i++)
{V0=2*V0;}
printf("N1=%d\n",N1);
printf("V0=%f\n",V0);
V=V0*(double(N1)/double(N0));
printf("V=%f\n",V);
}
double distance(int k)
{
double D=0;
int i;
for(i=1;i<=k;i++)
{D=D+w[i]*w[i];}
return D;
}
int rand(int z)
{int I,s;
s=a*(z%q)-r*(z/q);
if(s>=0) I=s;
else I=s+m;
return I;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -