C++随机数的一点问题。 关于为什么多次生成的随机数是一样的。

随机数基础知识

https://blog.csdn.net/Ws_Te47/article/details/115273146
之前自己写的一篇

或自行百度一下,这个太多了。

所遇问题

做题,从1-5随机生成1-7随机时所遇到。问题为测试时发现多次生成的随机数均一样。比如连续生成了500个1,又连续生成500个2。

https://blog.csdn.net/Ws_Te47/article/details/127263194
当时做题的记录

int f0()
{
	double p = 0.654;
	srand((unsigned int)time(NULL));
	return static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / 1)) < p ? 0 : 1;

}	//f0以固定概率p,返回0和1,不知具体内容。

当时想写这样一个东西

问题原因

把随机数种子写到了f0函数中。导致多次调用,多次初始化随机数种子。

具体解释

用不同数字初始化随机数种子,所生成的随机数不一样。
所谓时间初始化, srand((unsigned int)time(NULL));代表的是用 从1970年的某一时刻到现在经历的秒数 这样一个数值去初始化。所以得到的都不一样。
我们假设所生成的随机数是一个很长很长的数组,那么每次得到的就是随机数就是这个数组中的第一、二、三、… …、n位,所以肯定是不一样的。
但倘若多次调用,那么每次返回的随机数就都是这个数组中的第一位,所以得到的就是一样的了。

因此切记!!!

初始化随机数种子,只能调用一次。

你可能感兴趣的:(c++)