在不使用stl函数的情况下编写随机函数

时间:2011-10-11 07:46:30

标签: c++

我需要一个可以在不使用标准库函数的情况下生成随机数的函数。我认为time()%100会很好但是当你在循环中运行时,比如10次,你会一直得到相同的值。还有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

最简单的经典发生器是线性全等发生器。该 然而,选择参数是至关重要的;见随机数 发电机:很难找到好的(Park和Miller,CACM 10月, 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。)

答案 1 :(得分:2)

只需使用例如PRNG即可。 Linear Congruential方法 - 它只有几行代码。

答案 2 :(得分:0)

我建议你先阅读有关它的理论问题,但一个简单的算法是:

  1. 使用任何自定义值创建名为seed的静态或全局变量。

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

  3. 多次尝试并测试您的数学运算,以便更好地发挥作用。

  4. 注意:您的种子变量可以设置计时器值