程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 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);
}

結果:

 

 

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved