Random 在特定种子和范围内,Ruby 1.9.2中的类可保证以相同顺序生成随机数。例如:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

但是,假设我想在另一台计算机上生成序列中的下一个数字(不重新生成序列中的较早数字)。考虑到先前的输出,这应该是可能的。有没有办法用 Random 班级?还是我必须写自己的实施 梅森·扭动?

[编辑: 正如下面的评论所指出的那样,实际上不可能确定 Random 实例仅来自输出,因为仅使用状态的一部分(特别是低32位)用于输出。

有帮助吗?

解决方案

根据马克·安德烈·拉福特(Marc-AndréLafortune)的说法,无法测试,但是可以编辑发电机 这里。因此,这可能有效:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

File.open("/path/to/file","w") do |f|
  Marshal.dump(r,f)
end

# later, may be on another computer

File.open("/path/to/file","r") do |f|
  @v = Marshal.load(f)
end

puts @v.rand(100)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top