2011-12-28 38 views
-1

可能重複:
What common algorithms are used for C's rand()?蘭德功能在C

是怎樣的C庫中定義rand函數。 rand函數的時間複雜度是多少?如果有人可以提供rand函數的源代碼(我不需要它的實現,但是源代碼),那會很好。 Thanx

+2

你甚至試圖找到自己的答案嗎?當我谷歌「C蘭特」的第一個命中是[這個問題](http://stackoverflow.com/questions/1026327/what-c​​ommon-algorithms-are-used-for-cs-rand)。 – eaj 2011-12-28 16:54:06

+0

無論您的C編譯器包含哪個運行庫,都應該有源代碼。你檢查過它嗎?即使像Oli這樣聰明的人可以給你一些通用的指導方針或有教育意義的猜測,這依賴於實施。 – 2011-12-28 16:58:30

回答

0

它是實現定義的,每個庫作者可以自由實現它,因爲他們認爲合適。但是,它們通常基於linear congruential generators,這是有限的。 POSIX標準給出了一個example implementation

static unsigned long next = 1; 

/* RAND_MAX assumed to be 32767 */ 
int myrand(void) { 
    next = next * 1103515245 + 12345; 
    return((unsigned)(next/65536) % 32768); 
} 

void mysrand(unsigned seed) { 
    next = seed; 
} 

我不知道你所說的「時間複雜度」在這裏的意思; 「時間複雜度」通常指的是運行時間相對於n(其中n是輸入的大小或某物)的變化。

+0

我的意思是時間複雜度取決於我們想要隨機數的範圍(即上限和下限)。 – Prateek 2011-12-28 16:55:28

+0

@PRATEEKSULTANIA:'rand()'不允許你指定邊界。 – 2011-12-28 16:56:09