zoukankan      html  css  js  c++  java
  • C++库研究笔记——生成一组随机数

    当试图用

    srand(time(0))

    rand()

    生成一组随机数时发现,生成的数字很多都是「一样」的

    经过测试:srand(seed); rand() 生成随机数,当seed一样时,生成的随机数相同。

    所以上述「一样」的问题应该出在time(0)

    所以最后采用的方式是:sleep+ 高精度计时,+srand(gettime_function) +rand()

    不过,

    把gettimeofday换成更高精度可能效果更好


    代码如下(Linux下)

    #include <stdlib.h> // for srand
    #include <limits>
    #include <time.h>   // for nanosleep
    #include <sys/time.h>   // for gettimeofday
    
    
    
    /// generate random number between 0~1
    inline float randf(void)
    {
        struct timespec tim;
        tim.tv_sec=0; tim.tv_nsec=1e4;
        nanosleep(&tim, 0);
        struct timeval cur;
        gettimeofday(&cur, 0);
        srand(cur.tv_usec);
        return rand()/float(RAND_MAX);
    }
    
    inline int randi(int max=1e6)
    {
        struct timespec tim;
        tim.tv_sec=0; tim.tv_nsec=1e4
        nanosleep(&tim, 0);
        struct timeval cur;
        gettimeofday(&cur, 0);
        srand(cur.tv_usec); 
        return rand()%(max+1);
    }


    结果:


  • 相关阅读:
    第一阶段-意见评论
    团队冲刺第15天
    团队冲刺第14天
    第十三周进度报告
    团队冲刺第13天
    团队冲刺第12天
    团队冲刺第11天
    SCRUM第二阶段第九天
    SCRUM第二阶段第八天
    SCRUM第二阶段第七天
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3235282.html
Copyright © 2011-2022 走看看