我需要一个可以在不使用标准库函数的情况下生成随机数的函数。我认为time()%100
会很好但是当你在循环中运行时,比如10次,你会一直得到相同的值。还有更好的方法吗?
答案 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)
我建议你先阅读有关它的理论问题,但一个简单的算法是:
使用任何自定义值创建名为seed的静态或全局变量。
对种子和r
执行自定义数学运算,然后再次将结果存储在r
中。然后返回r
。 (注意:r
是随机函数中的静态变量)
多次尝试并测试您的数学运算,以便更好地发挥作用。
注意:您的种子变量可以设置计时器值