我不确定任何编程语言中的 rand() 函数或类似函数何时返回完全“逻辑”的值。因为它们不是基于时间、小时、天或其他东西,我想知道他如何选择数字。有人可以回答我吗?
这取决于算法。 维基百科总结了一种计算创建“随机数”的方法 http://en.wikipedia.org/wiki/Random_number_ Generation
m_w = <choose-initializer>; /* must not be zero */
m_z = <choose-initializer>; /* must not be zero */
uint get_random()
{
m_z = 36969 * (m_z & 65535) + (m_z >> 16);
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
return (m_z << 16) + m_w; /* 32-bit result */
}
您现在可以购买硬件随机数生成器来产生更好的随机数
实际上,rand 的大多数实现都是以某种方式基于时间的。 通常,在创建随机数时,您可以传入种子。 相同的种子将产生相同的随机数字串。 如果没有传入种子,大多数实现都会从当前系统时间创建种子。
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int rand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void srand(unsigned seed) {
next = seed;
}