2011-10-11 60 views
0

我需要一个函数,它可以在不使用标准库函数的情况下生成随机数。我认为time()%100会很好,但是当你运行一个循环时,说10次,你会始终得到相同的值。有没有更好的办法?不使用stl函数编写随机函数

+0

这是功课?如果是的话,重新标签将是有序的。 – otto

+1

“有没有更好的办法......”总是。 –

+3

[rand()](http://www.cplusplus.com/reference/clibrary/cstdlib/rand/)如何,它不是STL的一部分。 –

回答

0

我建议你第一次读到它的理论问题,而是一个简单的算法是:

  1. 与任何自定义值静态或全局命名种子变量。

  2. 对种子执行自定义数学运算,然后r再将结果存储在r中。然后返回r(注:r是在你的随机函数静态变量)

  3. 尝试和测试你的数学运算多次做出更好的功能。

注:您的种子变量可以用定时器设定值

4

最简单的经典生成器是线性全等生成器。然而,参数的选择是至关重要的;请参阅随机数 发电机:良好的人很难找到(Park and Miller,CACM Oct., 1988)。喜欢的东西:

static int current;   // Set to arbitrary value by seed 
static long long const a = 48271; 
static long long const m = 2147483647; 

int 
rand() 
{ 
    current = (a * current) % m; 
    return current; 
} 

(假设至少32位的int的。)

+0

+1代表伟大的代码示例。 –