我需要生成一个随机数,现在这个数需要在10到120秒之间。现在,在C语言中,我可以使用Random来完成这个函数,但是我不能访问这个函数。为了更聪明地尝试,我已经识别了一些随机数据,我可以访问无线扫描功能(实际上最终需要这个随机数),它为我提供每个检测到的Wi-Fi信号的信号强度。
使用这个,我认为我可以创建一个很好的随机数,但是很明显,这给出了一个非常大的和,需要缩小一些-这减少了不同随机数之间的潜在差异。
随机数将被用作不同无线设备尝试相互连接的后退计时器,显然是一个随机的数字,因为我可以达到更好的效果。
有什么想法吗?也许有一种更简单的方法来实现这一点?谢谢你的建议。
编辑:使帖子可读!
发布于 2011-03-26 03:49:33
对所有信号强度进行XOR运算,并将其转换为整数或任何需要的值。
或者,这或多或少是如何在C中定义rand()
的:
static unsigned int next = 1;
int rand_r(unsigned int *seed)
{
*seed = *seed * 1103515245 + 12345;
return (*seed % ((unsigned int)RAND_MAX + 1));
}
int rand(void)
{
return (rand_r(&next));
}
void srand(unsigned int seed)
{
next = seed;
}
发布于 2011-03-26 05:29:00
标准库函数是rand()
,而不是Random()
;为什么不能使用它呢?尽管它的所有潜在缺陷,它可能是足够的后退计时器,因为开始时间本身是随机的冲突,以及其他设备的异步行动。
人们可能会对这个函数的上述缺陷赞不绝口,更多的是在其返回值中使用朴素的模运算,但它是关于目标的适用性和充分性的,在这种情况下,rand()不仅仅是adquate。
https://stackoverflow.com/questions/5437351
复制相似问题