正态分布 c语言
场景:c语言产生正态分布有关问题求教
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语言产生正态分布问题求教
我想在想产生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));
因为随机数其实是伪随机的,都是由一定的算法算出来的,所以用时间(唯一性)设置种子的话可以保证每次产生的随机数更像随机数