计算机生成随机数的方法可以分为两大类:伪随机数生成(PRNG)和真随机数生成(TRG)。
伪随机数生成(PRNG)
伪随机数生成器(PRNG)是通过一个确定的算法和一个初始值(称为种子)来生成看似随机的数字序列。计算机通常使用以下几种算法来生成伪随机数:
线性同余法(LCG)
公式:`X(n+1) = (a * X(n) + b) mod c`
其中,`X(n)`是当前的随机数,`X(n+1)`是下一个随机数,`a`、`b`和`c`是常数。通过选择合适的`a`、`b`和`c`值,可以生成指定范围内的伪随机数。
平方取中法
将种子设为`X0`,并取模10000得到一个4位数。
将其平方得到一个8位数(不足8位时前面补0)。
取中间的4位数作为下一个4位随机数`X1`。
重复上述步骤可以产生多个随机数。
真随机数生成(TRG)
真随机数生成器(TRG)依赖于物理现象来生成随机数,因此生成的随机数是不可预测的。计算机中常用的真随机数生成方法包括:
基于物理现象
利用计算机内部的电子噪声、热噪声等物理现象来生成随机数。
计算随机数的步骤
以线性同余法为例,计算随机数的步骤如下:
获取种子:
选择一个初始值作为种子,例如当前时间戳。
调用算法公式:
使用线性同余法的公式计算下一个随机数。
计算结果:
将种子带入公式后计算出结果。
取模运算:
将计算结果对指定范围取模,得到指定范围内的随机数。
示例
假设我们使用线性同余法生成1到6之间的随机数,步骤如下:
获取种子:
例如,使用当前时间戳作为种子。
调用算法公式:
`X(n+1) = (1664525 * X(n) + 1013904223) mod 2^32`,其中`X(n)`是当前的随机数,`X(n+1)`是下一个随机数。
计算结果:
将种子带入公式后计算出结果。
取模运算:
将计算结果对6取模,得到1到6之间的随机数。
通过这种方法,每次都可以计算出一个从1到6的随机数。
建议
在需要高质量随机数的应用中,建议使用真随机数生成器。
在对随机性要求不高的应用中,可以使用伪随机数生成器,但要注意种子的选择,以确保随机数的不可预测性。