2011-12-28 40 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