📄 gauss2.c
字号:
/* gauss2.c 产生高斯随机数 */
/*(1) 由uniform.c产生(0,1)之间的均匀随机数u1,u2*/
/*(2) 令v1=2*u1-1,v2=2*u2-1,s=v1^2+v2^2*/
/*(3) 若s>1则转向(1)*/
/*(4) 给出z=sqrt(-2*lns/s)*v1,则z服从高斯分布*/
/*(5) 再通过变换x=mean+sigma*z得到均值为mean方差为sigma^2的高斯随机数x*/
#include "math.h"
#include "uniform.c"
double gauss2(double mean,double sigma,long int *s)
{double u1,u2,v1,v2,z,x,y;
double uniform(double ,double ,long int *);
do
{u1=uniform(0.0,1.0,s);
u2=uniform(0.0,1.0,s);
v1=2*u1-1.0;
v2=2*u2-1.0;
x=v1*v1+v2*v2;
}
while(x>1);
z=sqrt(-(2*log(x)/x))*v1;
y=mean+sigma*z;
return(y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -