C++ rand()和srand()

rand() 的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。

rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。这些随机数在一定范围内呈周期分布,因此rand()生成的随机数是伪随机数(当你取的随机数数量大于数值范围时就会重复出现)

比如用这样一段代码

1
2
3
4
5
6
int main(void)
{
for(int i = 0; i<5; i++)
printf(" %ld ", random());
return 0;
}

无论你执行多少遍,输出都是一样的

8b4a6886f93f4da8b6610dd7e975889a/20230318171459.png

如果运行前使用srand()初始化,如下

1
2
3
4
5
6
7
int main(void)
{
srand(time(0));
for(int i = 0; i<5; i++)
printf(" %d ", rand());
return 0;
}

用time初始化,时间不同随机数种子不同,那么结果如下

dc4e451c6837a75470224de52ca9addd/20230318171519.png

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2025 lorzzn
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信