rand()

rand()

rand()函數是Excel中產生隨機數的一個隨機函數。返回的隨機數是大於等於 0 及小於 1 的均勻分佈隨機實數,rand()函數每次計算工作表時都將返回一個新的隨機實數。

概述


rand()函數是產生隨機數的一個隨機函數。C語言里還有 srand()函數等。
詳述rand()
(1)使用該函數首先應在開頭包含頭文件stdlib.h
#include
(2)在標準的C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。
(3)rand()函數沒有輸入參數,直接通過表達式rand()來引用;例如可以用下面的語句來列印兩個隨機數:
printf("Random numbers are: %i %i\n",rand(),rand());
(4)因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機,有時候也叫偽隨機數
(5)為了使程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。
例子
文件名: rand_srand.c
#include
#include
int main()
{
unsigned int seed;
int k;
printf("Enter a positive integer seed value: \n");
scanf("%u",&seed);
srand(seed);
printf("Random Numbers are:\n");
for(k = 1; k <= 10; k++)
{
printf("%i",rand());
printf("\n");
}
return 0;
}
當提供的種子相同時,隨機數序列也是相同的。而且當種子為1時,與不使用srand()函數時一樣的,也就是說rand()函數默認情況下初始化種子值為1;
在stdlib.h 中這兩個函數的原型是:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand(); 這樣i就是一個真正意義上的隨機數。
rand()產生偽隨機數,srand函數提供種子,種子不同產生的隨機數序列也不同,所以通常先調用srand函數 time(0)返回的是系統的時間(從1970.1.1午夜算起),單位:秒,種子不同當然產生的隨機數相同幾率就很小了。

使用延伸


若要生成 a 與 b 之間的隨機實數,應使用: RAND()*(b-a)+a
如果要使用函數 RAND 生成一隨機數,並且使之不隨單元格計算而改變,可以在編輯欄中輸入“=RAND()”,保持編輯狀態,然後按 F9,將公式永久性地改為隨機數。

應用示例


公式說明(結果)
=RAND()介於 0 到 1 之間的一個隨機數(變數)
=RAND()*100大於等於 0 但小於 100 的一個隨機數(變數)

比較拓展


Excel中用於生成隨機數,功能與rand()函數相近的函數為RANDBETWEEN 函數,其用法如下:
語法:RANDBETWEEN(bottom, top)
參數:
Bottom必需。函數 RANDBETWEEN 將返回的最小整數。
Top必需。函數 RANDBETWEEN 將返回的最大整數。
功能:
返回位於指定的兩個數之間的一個隨機整數。每次計算工作表時都將返回一個新的隨機整數。