让我首先说明我要完成的工作:
- 我需要在一个范围内随机生成一组数字
- 我希望这些数字有点均匀分布
- 我需要能够为随机数生成播种,以便在给定种子的情况下,生成的随机数将始终相同。
在对 drand48()、rand() 和 arc4random() 进行了大量试验之后,我目前决定使用 rand() 来获取随机数,并使用 srand() 来播种。这是一个从我正在做的事情中简化的小例子:
let seed: UInt32 = 10
srand(seed)
let start = 0
let end = 100
let randomNumber = Double(rand()) % (end + 1 - start) + start
这行得通。给定相同的种子,会产生相同的随机数。执行多个 randomNumber 计算会产生多个不同的随机数。通过 srand 重新播种重新开始“随机性”。
唯一的缺点是 rand() 不是均匀分布的。事实上,我几乎总是得到一组在大多数情况下线性增加的数字。
听起来 arc4random_uniform 会生成更多的均匀随机输出,但是根据我的研究,不可能播种 arc4random,因为它在第一次被调用时播种,并且不一定“设计”为在外部播种。
所以我的问题;有没有更好的替代 srand() / rand() 仍然可以为给定种子提供相同的输出,但这些输出更均匀分布?
谢谢, - 亚当