[英]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.