1.rand()函式作用:產生隨機數值,函式範圍:0 ~ 32767
舉例:int x = rand() //隨機產生0~32767內的數字x
理解偽隨機數:用乙個程式舉例:
int
main()
printf
("\n");
return0;
}
執行結果:隨機產生10個數,但每次10個隨機數都一樣,稱為偽隨機數
為什麼出現上面結果:簡單理解為:rand()函式產生的隨機數,生成在隨機表中, 這個表裡每個位置的數字都是隨機產生的,但是一旦產生這個位置的值就不變了,上面舉例的函式每次呼叫都是取位置一樣(下標從0-9)的值因此一樣
2.解決方案
2.1srand( (unsigned)time( null ) ) ;
加乙個隨機種子(隨機數生成器): srand((unsigned)time( null )); 需 引用標頭檔案
srand( )括號中為種子,種子不同,產生隨機數不同,種子一樣隨機數一樣例如: srand(1)=srand(1)
為了每次隨機數不同,()中種子要隨時變化,用時間time:返回的是2023年1月1日0點到現在時間流失的秒數值
2.2加了隨機數生成器仍有缺陷,例如 :
2048專案c語言**中,遊戲開始初始狀態為隨機兩個位置產生2或4,若把下標設為隨機函式,兩次函式呼叫緊接著,而程式的執行是很快的,很可能會導致兩次函式在同一秒執行,即隨機種子幾乎一樣
解決方案,為使隨機種子不重複,在time後再加變動的常數值,例如:
定義乙個全域性變數:int gap = 0;
srand( (unsigned)time( null ) + gap++);
C語言的偽隨機數
一直想好好的系統的學習一下c語言的偽隨機數,今天終於逮到機會了 因此上述的srand unsigned time null 是利用系統時間來初始化隨機種子的。最後來介紹一下重要的乙個函式rand rand函式 標頭檔案 定義函式 int rand void 函式功能 產生隨機數 函式說明 因為ran...
C 偽隨機數
自然界中的有很多不確定的物理現象,通過測量這些現象,就可以獲得真隨機數。比如白雜訊的幅值 電子元器件的電壓雜訊等,真隨機數可以通過用硬體對這些引數進行採集獲得。偽隨機數序列是用確定性的演算法計算出來的週期很長的序列。程式的執行過程是乙個確定的過程,每一條指令都是確定的,因此不能產生真的隨機數。說到偽...
偽隨機數的問題
c,c vb,c 中用的隨機數都是偽隨機數,偽隨機數的乙個問題就是取值分布不均勻。比如 如果從100種隨機抽取,如果1和100都是一等獎,但是1和100的出現機率完全不是1 有可能比1 也有可能比1 小.也不知道各種資料庫中的隨機數最終是否也是採用了偽隨機數.目前如果要分布均勻,一般都是用高斯隨機數...