組み込みの疑似乱数ジェネレーターの現在の状態を Perl に保存して、プログラムを再度実行したときに、新しいシーケンスから開始するのではなく、中断したところからシーケンスを取得できるようにする方法はありますか?
現在、私は最初のシードと同様に現在の場所を保存してから、次のようなものを使用して既に見た最初のセグメントを破棄しています。
sub consume_upto_n {
my ($seed, $n) = @_;
$n = 1 unless defined $n and $n >= 1;
srand $seed;
rand for 1 .. $n - 1;
return;
}
例えば:
srand 0x18;
my @v = map { rand } 1 .. 5;
後で:
consume_upto_n(0x18, 3);
my @z = map { rand } 3 .. 5;
次に、$z[0] == $v[2]
など$z[1] == $v[3]
。