Tre*_*ham 5 ruby random mersenne-twister ruby-1.9
Random在给定特定种子和范围的情况下,Ruby 1.9.2中的类保证以相同的顺序生成随机数.例如:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
Run Code Online (Sandbox Code Playgroud)
但是假设我想在另一台计算机上生成序列中的下一个数字(不重新生成序列中的早期数字).鉴于先前的输出,这应该是可能的.有没有办法在Random课堂上这样做?或者我是否必须编写自己的Mersenne twister实现?
[ 编辑:正如下面的评论所指出的那样,实际上不可能Random仅从输出中确定实例的状态,因为只有部分状态(特别是低32位)用于输出.
无法测试,但可以根据 Marc-Andr\xc3\xa9 Lafortune此处对生成器进行编组。\n所以这可能有效:
\n\nr = Random.new(23)\nr.rand(100) # 83\nr.rand(100) # 40\n\nFile.open("/path/to/file","w") do |f|\n Marshal.dump(r,f)\nend\n\n# later, may be on another computer\n\nFile.open("/path/to/file","r") do |f|\n @v = Marshal.load(f)\nend\n\nputs @v.rand(100)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |