2012年10月1日 星期一

亂數哲學

在C語言裡面如果要使用到亂數,可以呼叫rand()這個函數, 它會自動產生一個介於0~RAND_MAX之間的亂數。例如要產生一個0~9之間的亂數:

int myRandNumber = rand()%10;

但是這有一個問題,執行幾次之後會發現每次產生的亂數都是一樣的,這是因為rand()要經由一個種子來產生亂數,而程式一開始的種子都是0,所以當然不論產生幾次,都會是一樣的。

這時候就可以利用另一個srand(),用時間當參數,可以產生不同的種子:

srand(time(NULL));

如此一來,程式每次產生的亂數都會是不同的了!

----------------------------------------

亂數,就如同人生每個不同的境遇。

rand()它是從0~RAND_MAX之間隨便取得一個數字出來用,也就是從有限的、已知的經驗裡面取出一個來用。

就好比一個人遇到任何對手,總是用那一百零一招來對付,遲早會被看破手腳。

RAND_MAX是一個整數。它有多大呢?依每個人的系統而定,可能是32767,也可能是2147483647,

但無論你的RAND_MAX有多大,如果每次都只懂得拿相同的數字,那RAND_MAX大也沒有任何意義。

因此我們需要的是srand(),輸入某個數值當參數,就可以產生不同的種子。

就像人生中必須要去經歷各種磨練,無論好的、壞的、酸的、甜的、苦的、辣的,只要是經驗,都會改變你心中的種子,讓你的未來有不同的境遇與體會。

srand()一般都是用時間當參數,這是因為時間是永遠不會重覆的數值,每一秒它的數值都在增加,此刻永遠跟前一刻不同,用它來產生種子再好不過。

這也意謂著,我們不僅要好好利用時間,更要瞭解它是一個永不停止的流量,只會越來越多,而人生在世的時間也越來越少。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main() {
    srand(time(NULL));
    int myRandNumber = (rand()%100)+1;
    printf("The Random Number is %d .\n", myRandNumber);
}

產生不同的種子,來達到未來不同的境遇體會,這件事情雖然重要,但最重要的是,能否好好利用這個產生出來的myRandNumber?

對你而言,每天拉拉雜雜跑出來的myRandNumber,是毫無意義的亂數呢? 還是隱藏重要意義的數值呢?