使用rand的函数始终以相同的方式初始化矩阵

时间:2013-12-03 23:22:52

标签: c arrays random initialization

我有一个函数应该以随机的方式初始化矩阵的值,给定概率(在这种情况下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()函数的实现?还是我错误地使用它?谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

对于作为参数传递的每个值rand()生成不同的继承。

答案 1 :(得分:1)

您需要在代码的初始部分调用srand以初始化随机数生成器,因为文档显示这是调用 srand 的典型方法:

srand(time(0));

正如文件所述:

  

如果在对srand()的任何调用之前使用了rand(),则rand()的行为就像是用srand(1)播种一样。每次使用srand()播种rand()时,它必须生成相同的值序列。

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

的原因
  

标准做法是使用对时间(0)的调用结果作为种子。但是,time()返回time_t值,并且time_t不保证是整数类型。但实际上,每个主要实现都将time_t定义为一个整数类型,这也是POSIX所需要的。