C 中的隨機函式

2021-06-25 20:57:31 字數 862 閱讀 8351

一、random函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。 可改用c++下的rand函式來實現。

1、c++標準函式庫提供一隨機數生成器rand,返回0-rand_max之間均勻分布的偽隨機整數。 rand_max必須至少為32767。rand()函式不接受引數,預設以1為種子(即起始值)。 隨機數生成器總是以相同的種子開始,所以形成的偽隨機數列也相同,失去了隨機意義。(但這樣便於程式除錯) 

2、c++中另一函式srand(),可以指定不同的數(無符號整數變元)為種子。但是如果種子相同,偽隨機數列也相同。乙個辦法是讓使用者輸入種子,但是仍然不理想。

3、 比較理想的是用變化的數,比如時間來作為隨機數生成器的種子。 time的值每時每刻都不同。所以種子不同,所以,產生的隨機數也不同。

// c++隨機函式(vc program)

#include

#include

#include

#define max 100

void main()

{ srand( (unsigned)time( null ) );//srand()函式產生乙個以當前時間開始的隨機種子

for (int i=0;i<10;i++)

cout<

注:rand()產生的是0 to rand_max (32767)上的隨機數,而32767不能被11整除。

因此 int n = rand() % 11; 得到的隨機數,並不是從0-10一致分布的取9,10的概率取0-8幾個數字的概率少了11/32767約為1/2978;

所以要取0~m的隨機數,若m較小時這樣作問題不大,但m較大時,例如m=30000,則取到0-2767的概率是取後面幾個數字的兩倍,嚴重不符合隨機分布! 

C 中的隨機函式

一 random函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。可改用c 下的rand函式來實現。1 c 標準函式庫提供一隨機數生成器rand,返回0 rand max之間均勻分布的偽隨機整數。rand max必須至少為32767。rand 函式不接受引數,預設以1為種子 即起始值 ...

c 中的隨機函式rand()

一 c 中不能使用random 函式 random 函式不是ansi c標準,不能在gcc,vc等編譯器下編譯通過。但在c語言中int random num 可以這樣使用,它返回的是0至num 1的乙個隨機數。可改用c 下的rand函式來實現。1 c 標準函式庫提供一隨機數生成器rand,返回0 r...

C 隨機函式

1.srand 和 rand 函式 rand 產生隨機數,一般是從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。如果使用者在此之前沒有呼叫過srand seed 它會自動呼叫srand 1 一次。如果seed的值每次都一樣,那麼產生的隨...