1、一、产生0-1均匀分布数 采用混合同余法,,,即为一个在0~1之间的随机数。通常情况下,选取,我们任意给定一个初始值,即可得到一个随机数,在程序中采用指针变量*s,使得每次产生的随机数都不一样,只要改变循环的次数,就可以得到任意多个0~1随机数。 程序实现代码如下: double x1(double a,double b, int *s) { double t; *s=2045*(*s)+1; *s=*s-(*s/1048576)*1048576; t=(*s)/1048576.0; return(t); } 二、产生标准高斯分布数 标准的高斯分布均值=0,方差
2、1;根据中心极限定理有,根据此式可以由12个0~1分布数产生一个高斯数。改变循环次数可以得到任意多个标准高斯分布数。
程序实现代码如下:
int main()
{
double mean,sigma;
double x[100];
int i,j;
int s;
mean=0.0;
sigma=1.0;
s=19444;
cout<<"产生个高斯数:"< 3、
x[j]=x[j]+x1(mean,sigma,&s);
}
x[j]=x[j]-6.0;
printf("%13.7f",x[j]);
if((j+1)%5==0)
{cout< 4、00
#define PI 3.14159826
#include 5、InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
6、 return FALSE;
while (GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;
///////// 7、///////////////////
double x1(double a,double b, int *s);
double mean=0,sigma=1.0;
srand((unsigned)time(NULL));
double x[10000],b[10000]={0},temp;
int i,j;
int s1;
int k;
s1=19444;
for(j=0;j<10000;j++)
{
x[j]=0;
for(i=0;i<12;i++)
{
8、 x[j]=x[j]+x1(mean,sigma,&s1);
}
x[j]=x[j]-6.0;
}
for(i=0;i<10000;i++)
{ temp=x[i];
// printf("%lf\t",temp);
for(j=0;j<10000;j++)
{
if(-3+0.2*j 9、PAINT:
hDC=BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
hPen=(HPEN)GetStockObject(BLACK_PEN);
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
SelectObject(hDC,hBrush);
SelectObject(hDC,hPen);
///////////////////////
//////////////////////////////////////////// 10、
for(k=0;k<100;k++){
Rectangle(hDC,20+10*k,400-0.3*b[k],30+10*k,400);
}
EndPaint(hWnd,&PtStr);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOL InitWindows(HINSTANCE hInstance,int n 11、CmdShow)
{
HWND hWnd;
hWnd=CreateWindow("WinFill",
"高斯分布",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitWindows 12、Class(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWn 13、dProc=WndProc;
WndClass.lpszClassName="WinFill";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
double x1(double a,double b, int *s)
{ double t;
*s=2045*(*s)+1;
*s=*s-(*s/1048576)*1048576;
t=(*s)/1048576.0;
return(t);
}
得到结果图如下:






