📄 possion.cpp
字号:
#include<stdio.h>
#include<math.h>
#define lambda 1
#define MAX 1000
#define znew (z=36969*(z&65535)+(z>>16))
#define wnew (w=18000*(w&65535)+(w>>16))
#define MWC ((znew<<16)+wnew)
#define SHR3 (jsr^=(jsr<<17),jsr^=(jsr>>13),jsr^=(jsr<<15))
#define CONG (jcong=69069*jcong+1234567)
#define KISS ((MWC^CONG)+SHR3)
#define UNI (KISS*2.328306e-10)
double r[MAX];
typedef unsigned long UL;
static UL z=362436069,w=521288629,jsr=123456789,jcong=380116160;
void settable(UL i1,UL i2,UL i3,UL i4)
{ int i;
z=i1;
w=i2;
jsr=i3;
jcong=i4;
}
void randnum(void)
{
int i=0;
double k;
settable(12345,65435,34221,12345) ;
for(i=0;i<MAX;i++)
{
k=UNI;
r[i]=k;
}
}
//产生第i个possion分布的随机数
int possion(double r[],int i)
{
double a,b,u;
int j,x;
a=exp(-lambda);
b=1.0;
j=0;
while(b>=a)
{
u=r[i];
b=b*u;
j++;
}
x=j-1;
return x;
}
void main()
{
int i,x;
FILE *out;
if((out=fopen("POSSIONUM.DAT","w"))==NULL)
{
printf("cannot open file\n");
return;
}
randnum();
for(i=0;i<MAX;i++)
{x=possion(r,i) ;
printf("%10d\n",x);
fprintf(out,"%10d\n",x);
}
fclose(out);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -