• C++ 随机数、srand((unsigned)time(NULL)) 详解


            在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。

            下面是一个关于生成随机数的简单示例。示例中使用了 time() 函数来获取系统时间的秒数,通过调用 rand() 函数来生成随机数:

    示例

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main ()
    6. {
    7. int i,j;
    8. // 设置种子
    9. srand( (unsigned)time( NULL ) );
    10. /* 生成 8 个随机数 */
    11. for( i = 0; i < 8; i++ )
    12. {
    13. // 生成实际的随机数
    14. j= rand();
    15. cout <<"随机数: " << j << endl;
    16. }
    17. return 0;
    18. }

    srand((unsigned)time(NULL)) 详解

    srand 函数是随机数发生器的初始化函数。

    原型:

    void srand(unsigned seed);

    用法: 它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的 rand() 函数会出现一样的随机数,如: srand(1); 直接使用 1 来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。

    进一步说明:计算机并不能产生真正的随机数,而是已经编写好一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。

     即:只需在主程序开始处调用 srand((unsigned)time(NULL)); 后面直接用rand就可以了。不要在 for 等循环放置 srand((unsigned)time(NULL));

  • 相关阅读:
    深度学习 Day 16——利用卷神经网络实现咖啡豆的识别
    spring cloud gateway 入门
    docker安装目录迁移
    channel-wise卷积--学习笔记
    2023-9-8 阿里健康2024校招java-体检及泛医疗部门一面
    JDK 17 之 JVM调优 史诗级 教程
    io概述及其分类
    独立站SaaS建站工具:电商领域的革命性利器
    技术实践|大模型内容安全蓝军的道与术
    EasyExcel实现动态列解析和存表
  • 原文地址:https://blog.csdn.net/m0_48241022/article/details/133488138