当试图用
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);
}
结果: