69,369
社区成员
发帖
与我相关
我的任务
分享
http://blog.csdn.net/memray/article/details/8932518
#include<iostream>
#include<math.h>
using namespace std;
#define IM1 2147483563
#define IM2 2147483399
#define AM (1.0/IM1)
#define IMM1 (IM1-1)
#define IA1 40014
#define IA2 40692
#define IQ1 53668
#define IQ2 52774
#define IR1 12211
#define IR2 3791
#define NTAB 32
#define NDIV (1+IMM1/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
static long seed1=25;
static long seed2=12;
static long seed3=60;
long ran2(long *idum)
{
int j;
long k;
static long idum2=123456789;
long *p=&idum2;
static long iy=0;
static long iv[NTAB] ;
long temp;
if (*idum<=0) /* 初始化 */
{
if (-(*idum)<1) *idum=1;
else *idum=-(*idum);
*p=(*idum);
for (j=NTAB+7;j>=0;j--) /* 负荷转移表,载入洗牌表 */
{
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum<0)
{*idum+=IM1;}
if (j<NTAB)
{iv[j]=*idum;}
}
iy=iv[0];
}
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum<0)
{*idum+=IM1;
k=idum2/IQ2 ;
idum2=IA2*(idum2-k*IQ2)-k*IR2;}
if (idum2<0) {idum2+=IM2;
j=iy/NDIV;
iy=iv[j]-idum2;
iv[j]=*idum;}
if (iy<1) {iy+=IMM1;}
if ((temp=AM*iy)>RNMX)
return RNMX;
else return temp;
}
long rnd_gen2(long *seed)
{int p;
long sum=0;
for (p=0;p<12;p++)
{
sum+=ran2(seed);
}
sum-=ran2(seed);
return sum;
}
int main(void)
{
int j,k;
long rndx[5][8];
long rndy[5][8];
long rndz[5][8];
long *a1;
long *a2;
long *a3;
a1=&seed1;
a2=&seed2;
a3=&seed3;
for(j=0;j<5;j++)
{
for(k=0;k<8;k++)
{
rndx[j][k]=rnd_gen2(a1);
rndy[j][k]=rnd_gen2(a1);
rndz[j][k]=rnd_gen2(a1);
cout<<j<<','<<k<<' '<<rndx[j][k]<<','<<rndy[j][k]<<','<<rndz[j][k]<<"\n";
}
}
return 0;
}
运行结果:
0,0 0,0,0
0,1 0,0,0
0,2 0,0,0
0,3 0,0,0
0,4 0,0,0
0,5 0,0,0
0,6 0,0,0
0,7 0,0,0
1,0 0,0,0
1,1 0,0,0
1,2 0,0,0
1,3 0,0,0
1,4 0,0,0
1,5 0,0,0
1,6 0,0,0
1,7 0,0,0
2,0 0,0,0
2,1 0,0,0
2,2 0,0,0
2,3 0,0,0
2,4 0,0,0
2,5 0,0,0
2,6 0,0,0
2,7 0,0,0
3,0 0,0,0
3,1 0,0,0
3,2 0,0,0
3,3 0,0,0
3,4 0,0,0
3,5 0,0,0
3,6 0,0,0
3,7 0,0,0
4,0 0,0,0
4,1 0,0,0
4,2 0,0,0
4,3 0,0,0
4,4 0,0,0
4,5 0,0,0
4,6 0,0,0
4,7 0,0,0
#include<iostream.h>
#include<math.h>
#define IM1 2147483563
#define IM2 2147483399
#define AM (1.0/IM1)
#define IMM1 (IM1-1)
#define IA1 40014
#define IA2 40692
#define IQ1 53668
#define IQ2 52774
#define IR1 12211
#define IR2 3791
#define NTAB 32
#define NDIV (1+IMM1/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
static long seed1=25;
static long seed2=66;
static long seed3=60;
double ran2(long *idum)
{
int j;
long k;
static long idum2=123456789;
static long iy=0;
static long iv[NTAB] ;
float temp;
if (*idum<=0) /* 初始化 */
{
if (-(*idum)<1) *idum=1;
else *idum=-(*idum);
idum2=(*idum);
for (j=NTAB+7;j>=0;j--) /* 负荷转移表,载入洗牌表 */
{
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum<0)
*idum+=IM1;
if (j<NTAB)
iv[j]=*idum;
}
iy=iv[0];
}
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
if (*idum<0)
{*idum+=IM1;
k=idum2/IQ2 ;
idum2=IA2*(idum2-k*IQ2)-k*IR2;}
if (idum2<0) {idum2+=IM2;
j=iy/NDIV;
iy=iv[j]-idum2;
iv[j]=*idum;}
if (iy<1) {iy+=IMM1;}
if ((temp=AM*iy)>RNMX) return RNMX;
else return temp;
}
void main()
{
int j,k;
double rndx[30][30];
double rndy[30][30];
double rndz[30][30];
long *a1;
long *a2;
long *a3;
a1=&seed1;
a2=&seed2;
a3=&seed3;
for(j=0;j<30;j++)
{for(k=0;k<30;k++)
{rndx[j][k]=ran2(a1);
rndy[j][k]=ran2(a1);
rndz[j][k]=ran2(a1);
}
}
for(j=0;j<10;j++)
{for(k=0;k<30;k++)
{cout<<j<<','<<k<<' '<<rndx[j][k]<<','<<rndy[j][k]<<','<<rndz[j][k]<<"\n";}}}