我有一个函数,应该以一个随机的方式初始化矩阵的值,给定一个概率(在这种情况下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()的任何调用之前使用了rand(),则rand()的行为就像是用srand(1)播种一样。 每次使用srand()播种rand()时,它必须生成相同的值序列。
这部分解释了我们使用time(0)
:
标准做法是使用调用time(0)的结果作为种子。 但是,time()返回time_t值,并且不保证time_t是整数类型。 但实际上,每个主要实现都将time_t定义为整数类型,这也是POSIX所需要的。
你应该调用srand函数初始化随机数生成器:
srand(time(NULL)); init_matrix(m, &n_gen); // call your function
对于作为参数传递的每个值, rand()
生成不同的inheritance。
以上就是c/c++开发分享使用rand的函数初始化矩阵总是以相同的方式相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522878.html