Ruby 1.9.2 中的分布式顺序随机数生成
Ruby 1.9.2 中的 Random
类保证在给定特定种子和范围的情况下以相同顺序生成随机数。例如:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
但是假设我想在另一台计算机上生成序列中的下一个数字(而不重新生成序列中较早的数字)。鉴于之前的输出,这应该是可能的。有没有办法使用 Random
类来做到这一点?或者我是否必须编写自己的 梅森扭曲器 的实现?
[编辑:正如下面的评论所指出的,实际上不可能仅从输出中确定Random
实例的状态,因为只有部分状态(具体来说,低 32 位)用于输出。]
The Random
class in Ruby 1.9.2 is guaranteed to generate random numbers in the same order, given a particular seed and range. For instance:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
But suppose I want to generate the next number in the sequence on another computer (without re-generating the earlier numbers in the sequence). This should be possible, given the previous output. Is there a way to do this with the Random
class? Or do I have to write my own implementation of the Mersenne twister?
[Edit: As pointed out in the comments below, it is not in fact possible to determine the state of a Random
instance just from the output, because only part of the state (specifically, the low 32 bits) are used for the output.]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
无法测试,但可以根据 Marc-André Lafortune 的说法对生成器进行编组 这里。
所以这可能有效:
Can't test, but the generator can be marshalled, according to Marc-André Lafortune here.
So this might work: