加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:01:50 所属栏目:大数据 来源:网络整理
导读:有没有办法在Perl中存储内置的伪随机数生成器的当前状态,这样当我的程序再次运行时,它可以从它所在的位置拾取序列,而不是从一个新的序列开始? 现在,我正在存储我的位置以及初始的种子,然后把我已经看到的初始段丢弃,使用类似于 sub consume_upto_n { my ($s
有没有办法在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使用的对象).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读