我需要一个快速的随机数生成器,它允许我在随机数序列的不同位置随机访问数字。我选择了 Xorshift,因为它快速且易于实施。
为了从序列中获取特定的随机数,我实现了以下方法(mPos
保存下一个随机数的位置):
void XorshiftRandomGenerator::skipTo(unsigned int pos)
{
// Reset if we passed the position
if (mPos>pos)
reset();
// Generate random numbers until we're done
while (mPos<pos)
random();
}
随后random()
将返回所需的数字,但这种方法非常昂贵。有没有办法用 Xorshift 跳过大量随机数,而不计算其间的每个随机数?
作为替代方案,我可以使用另一个随机数生成器。你能推荐一个允许快速跳过的吗?