簡體   English   中英

使用rand的函數始終以相同的方式初始化矩陣

[英]function with rand initializes matrix always the same way

我有一個函數應該以隨機的方式初始化矩陣的值,給定概率(在這種情況下p(0)= 1/3,p(1)= 2/3)問題是矩陣總是出來是一樣的:

void init_matrix(short unsigned* m,int* n_gen)
{
    *n_gen=0;
    int i;
    for(i=0;i<N_X*N_Y;i++) {
        if( ( ( rand() % 100 ) % 3) == 0 )
            m[i]=0;
        else
            m[i]=1;
     }
}

是因為rand()函數的實現? 還是我錯誤地使用它? 謝謝!

您應該調用srand函數來初始化隨機數生成器:

srand(time(NULL));
init_matrix(m, &n_gen); // call your function

對於作為參數傳遞的每個值, rand()生成不同的繼承。

您需要在代碼的初始部分調用srand以初始化隨機數生成器,因為文檔顯示這是調用srand的典型方法:

srand(time(0));

正如文件所述:

如果在對srand()的任何調用之前使用rand(),則rand()的行為就像是用srand(1)播種一樣。 每次使用srand()播種rand()時,它必須生成相同的值序列。

這部分解釋了我們使用time(0)

標准做法是使用調用time(0)的結果作為種子。 但是,time()返回time_t值,並且time_t不保證是整數類型。 但實際上,每個主要實現都將time_t定義為一個整數類型,這也是POSIX所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM