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);
}


结果:

 


 

posted @ 2013-08-03 21:21  javawebsoa  Views(309)  Comments(0Edit  收藏  举报