当前位置:编程学习 > C/C++ >>

C++库研究笔记——生成一组随机数

当试图用

srand(time(0))

rand()

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

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

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

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

不过,

[cpp] view plaincopyprint?把gettimeofday换成更高精度可能效果更好 

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

 

代码如下(Linux下)


 

 include <stdlib.h> // for srand  
#include <limits>  
#include <time.h>   // for nanosleep  
#include <sys/time.h>   // for gettimeofday 

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

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

结果:

 

 

\
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,