當前位置:編程學習大全網 - 源碼下載 - strand(time(null)) 在C語言中 為什麽可以 隨機化數種子 原形是什麽

strand(time(null)) 在C語言中 為什麽可以 隨機化數種子 原形是什麽

在C語言中獲取隨機數的函數是rand();?

壹個合格的隨機數值必須由獲取到的值足夠散列,以及值不可預知的特性,但如果不做任何處理直接調用rand(),那麽得到的值是固定的。下面是壹個例子:

#include?<stdio.h>

#include?<stdlib.h>

int?main()

{

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

printf("%d\n",?rand());//獲取10次隨機數並打印。

return?0;

}

運行這個程序,看起來沒什麽問題,因為獲取到的10個數字都是散列的,很有隨機數的感覺。但重復運行這個程序就會發現,每次運行得到的十個數都是同樣的,這個並不符合不可預知的特性。

所以C語言中的隨機數函數rand()被稱為偽隨機數。

通過srand函數,可以讓這個偽隨機數更“真”壹些,它的原理是設置壹個隨機數種子,然後後續的隨機數依賴於種子值。

#include?<stdio.h>

#include?<stdlib.h>

int?main()

{

for(i?=?0;?i?<?100000;?i?+=?10000)

{

srand(i);

printf("%d\n",?rand());//獲取10次隨機數並打印。

}

return?0;

}

反復運行這個程序,會發現,相同的隨機數種子獲取到的隨機數值同樣是相同的。這樣這個隨機數種子值又不能是固定值了,於是需要想辦法讓這個種子值有變化。

讓這個值有變化的方法有很多種,最常用的就是通過時間函數time()。這個函數是獲取當前時間值的,單位是毫秒。通常的調用方式是time(NULL);

用這個值來做隨機數種子可以讓每次調用得到的種子值不同,因為要達到完全相同的效果,必須要在毫秒級的相同時間下同時執行,這個概率太低了。

於是time(NULL)就成了最常用的隨機數種子。

以上就是srand(time(NULL)); 經常放在隨機數發生前作為隨機數種子的原因了。

  • 上一篇:求《人魚的旋律》裏 《七彩的微風》(中文版)的伴奏和曲譜~~ 謝謝!!
  • 下一篇:Office for Mac 如何打開公式編輯器?
  • copyright 2024編程學習大全網