Jim*_*ger 5 random srand rakudo raku
当我反复运行这段代码时,
\nsrand 1;\nmy @x = (1..1000).pick: 100;\nsay sum @x;\n\n
Run Code Online (Sandbox Code Playgroud)\n我每次都会得到不同的答案。如果我正在重置,srand
为什么它不应该每次都产生相同的随机数?
该错误发生在 REPL 中。
\n该文件中出现错误:
\nuse v6.d;\n\nsrand 1;\nmy $x = rand;\nsay $x; # OUTPUT: 0.5511548437617427\n\nsrand 1;\n$x = rand;\nsay $x; # OUTPUT: 0.308302962221659\n\nsay $*KERNEL; # OUTPUT: darwin\n\n
Run Code Online (Sandbox Code Playgroud)\n我在用着:
\n欢迎使用 Rakudo\xe2\x84\xa2 v2022.07。\n实现 Raku\xc2\xae 编程语言 v6.d。\n基于 MoarVM 版本 2022.07 构建。
\n(这个答案是jnthn在基于这个问题打开的GitHub问题中的评论的释义)。
设置srand 1
将导致生成相同序列的随机数——即第n个随机数将相同。然而,由于 Raku(实际上是 Rakudo 和/或 MoarVM,假设您正在使用这些后端)在内部使用随机数,因此您不会始终处于该序列中的相同位置(即,您的位置n
可能不同),因此您可能无法获得相同的随机数。
Rakudo 的优化器使这变得更加复杂。天真地,稍后在程序中重复相同的代码应该消耗序列中相同数量的随机数。但是,优化器很可能会从后续调用中删除其中一些随机数使用,这可能会导致不同的随机数。
我不清楚当前行为的目的与 Rakudo/MoarVM 实现中的错误相比有多大程度的影响;请参阅之前链接的问题以了解更多详细信息。
归档时间: |
|
查看次数: |
179 次 |
最近记录: |