我有给定的概率应该初始化以随机方式矩阵的值的函数,(在这种情况下P(0)= 1/3,P(1)= 2/3)的问题是,所述基质始终出来是相同的:
void init_matrix(short unsigned* m,int* n_gen)
{
*n_gen=0;
int i;
for(i=0;i<N_X*N_Y;i++) {
if( ( ( rand() % 100 ) % 3) == 0 )
m[i]=0;
else
m[i]=1;
}
}
是不是因为rand()函数的执行? 还是我用它不正确? 谢谢!
你需要调用函数srand以初始化随机数生成器在你的代码的最初部分,如该文件显示,这是调用函数srand的典型方法:
srand(time(0));
作为文件说明:
如果兰特()的任何调用之前使用srand()函数,兰特()的行为就好像是用函数srand种子(1)。 每次兰特()被接种srand()函数,它必须产生的值的相同序列。
这部分解释了为什么我们使用time(0)
标准的做法是使用一个呼叫的结果时间(0)作为种子。 然而,时间()返回一个time_t的值,并且time_t的不保证是整数类型。 但在实践中,每一个主要的实现定义的time_t是一个整数类型,这也是什么POSIX要求。
你应该调用函数srand函数来初始化随机数生成器:
srand(time(NULL));
init_matrix(m, &n_gen); // call your function
用于传递的参数的每一个值rand()
生成不同的继承。