与Rand函数总是初始化矩阵以同样的方式(function with rand initialize

2019-10-19 02:35发布

我有给定的概率应该初始化以随机方式矩阵的值的函数,(在这种情况下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()函数的执行? 还是我用它不正确? 谢谢!

Answer 1:

你需要调用函数srand以初始化随机数生成器在你的代码的最初部分,如该文件显示,这是调用函数srand的典型方法:

srand(time(0));

作为文件说明:

如果兰特()的任何调用之前使用srand()函数,兰特()的行为就好像是用函数srand种子(1)。 每次兰特()被接种srand()函数,它必须产生的值的相同序列。

这部分解释了为什么我们使用time(0)

标准的做法是使用一个呼叫的结果时间(0)作为种子。 然而,时间()返回一个time_t的值,并且time_t的不保证是整数类型。 但在实践中,每一个主要的实现定义的time_t是一个整数类型,这也是什么POSIX要求。



Answer 2:

你应该调用函数srand函数来初始化随机数生成器:

srand(time(NULL));
init_matrix(m, &n_gen); // call your function

用于传递的参数的每一个值rand()生成不同的继承。



文章来源: function with rand initializes matrix always the same way