乱数シーケンスのさまざまな位置にある番号にランダムにアクセスできる高速乱数ジェネレーターが必要です。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で大量の乱数をスキップする方法はありますか?
別の方法として、別の乱数ジェネレーターを使用することもできます。先に速くスキップできるものを提案できますか?