如何在Perl中存储伪随机生成器的状态?

前端之家收集整理的这篇文章主要介绍了如何在Perl中存储伪随机生成器的状态?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在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]等

解决方法

我不认为内置的兰特可以让你这样做.但是可以使用替代的rand.例如,Math::Random::MT::Auto允许您使用 serialize its objects(大概包括$MRMA :: PRNG,它是替换rand使用的对象).

我不太清楚这一点是什么.如果它是一个相当随机的序列,你怎么能告诉你是继续这个序列还是开始一个新的序列?

猜你在找的Perl相关文章