簡體   English   中英

使用C語言運行rand()並使用Shell腳本循環

[英]Run rand() in C language and loop with Shell Scripts

我有一個C代碼文件(稱為“ test.c ”,輸出為“ test.out ”),如下所示,只是一個簡單的隨機數輸出:

int main()
{
    srand(time(NULL)); 
    double r = (double)rand() / (double)RAND_MAX;
    printf("%f\n", r);
    return 0;
}

現在,我使用外殼程序腳本在Linux中運行“ test.out ” 5次,以下代碼:

for i in 1 2 3 4 5
do
    test.out
done

但結果顯示如下

0.840188
0.840188
0.840188
0.840188
0.840188

它顯示相同的隨機數。

您可以使用當前時間初始化偽隨機數生成器。 在大多數平台上, time函數以秒為單位返回當前時間。 如果您在一秒鍾內多次運行此程序,則將在所有執行中設置相同的種子,並獲得相同的“隨機”編號。

在腳本的循環中添加例如sleep 1 ,您將看到不同的結果。

rand()將為同一種子 (用srand()設置的種子 rand()產生相同的數字序列。

循環很可能運行得太快,並且所有運行最終都使用相同的種子 (即time(NULL)返回相同的值)。 因此,您將看到相同的輸出。

您可以使用drand48()來產生均勻分布的數字。 或者,如果您只想測試rand() ,則可以在兩次迭代之間添加一個延遲。

for i in 1 2 3 4 5
do
    test.out
done

您在同一秒內執行了5次程序,並且由於您將系統時間(以秒為單位)用作rand()函數的種子,因此自然會得到相同的結果。 如果在兩次執行之間等待一秒鍾(或更長的一秒鍾),您將獲得不同的值。

暫無
暫無

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

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