zoukankan      html  css  js  c++  java
  • 随机数rand-如何正确生成随机数

    #include <stdio.h>

    //#include <Windows.h>

    int main(void)

    {

    int i;

    //srand((unsigned)time(NULL));//每次运行该程序时,如果当前秒数不同,则不同次运行生成的随机数不同,

    for (i = 0; i < 20; i++)    // 否则不同次运行生成的随机数是一样的

    {

    //srand(_getpid());

    srand((unsigned)time(NULL));//每次运行该程序时,如果当前秒数不同,则不同次运行生成的随机数不同,

    printf("%d ", rand() );//无论是否有种子,3个随机数都不一定会相同.

    printf("%d ", rand() );

    printf("%d ", rand() );

    printf("==================== ");

    //system("pause");

    }

    return 0;

    }

    结果:每次循环产生的随机数一样.如下图所示.

                                

      rand 是固定的迭代函数,对一个初始值不停嵌套计算,输出每次计算的结果。输出的序列有不错的统计性质,所以叫伪随机数。srand 就是设置这个初始值。不停地设置相同的初始值,rand 就总是初始值经过一次计算的结果,也就不会变。这是错误的用法。

    正确的用法,srand 一个程序只能调用一次。或者说一个线程只调用一次(对于常见的每个线程一个随机数发生器状态的 C 运行时库)。

    1.综上所述,注释掉for循环中的srand((unsigned)time(NULL)),使用for上一行的srand((unsigned)time(NULL)).

    2.time(NULL)每秒变化一次,如果在一秒内连续执行该程序2,2次得到的随机数一样.这时,可以使用_getpid()代替time(NULL)._getpid()(VS2015,LINUX下为getpid()),获取进程ID.

    不是尽力而为,而是全力以赴.
  • 相关阅读:
    Ajax缓存的几种处理方式
    Day--1--网络协议
    Day4--js--递归各种大法渡难关
    你以为的BUG--BFC给你解决!
    Day3--js--可恶之变量声明提升大法.。。
    Day2--js--烧脑睿智循环的练习题
    ERwin创建逻辑模型
    ERwin入门
    Oracle存储过程由例子到理论
    oracle存储过程
  • 原文地址:https://www.cnblogs.com/yang666/p/6400526.html
Copyright © 2011-2022 走看看