读书人

c语言产生正态分布有关问题求教

发布时间: 2012-02-10 21:27:41 作者: rapoo

c语言产生正态分布问题求教
我想在想产生N个服从正态分布的随机数,但是每次产生这些数都是一样的,不知问题出在哪里,请各位帮助。

代码如下:
#include "*.h " //包含一些头文件

float gaussian_random(void);
float uniform_random(void);


void main()
{
for(int N = 0; N < 10000; N++)
{
number[N] = gaussian_random(); //这些随机数我存到硬盘里,然后查看的

}
}


float gaussian_random(void)
{
static int next_gaussian = 0;
static float saved_gaussian_value;

float fac, rsq, v1, v2;

if (next_gaussian == 0) {
do {
v1 = 2.0*uniform_random()-1.0;
v2 = 2.0*uniform_random()-1.0;
rsq = v1*v1+v2*v2;
} while (rsq > = 1.0 || rsq == 0.0);
fac = sqrt(-2.0*log(rsq)/rsq);
saved_gaussian_value=v1*fac;
next_gaussian=1;
return v2*fac;
} else {
next_gaussian=0;
return saved_gaussian_value;
}
}

float uniform_random(void)
{

return (float) rand() / (float) RAND_MAX;
}


现在问题是:我运行同样的程序,得到的随机数组和上次运行保存的结果都是一样。我如何才能在没次运行时,都能得到不一样的随机数组呢。

[解决办法]
在main里加一句
srand(time(NULL));

因为随机数其实是伪随机的,都是由一定的算法算出来的,所以用时间(唯一性)设置种子的话可以保证每次产生的随机数更像随机数

读书人网 >C语言

热点推荐