首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >同样的值不应该产生相同的随机数吗?

同样的值不应该产生相同的随机数吗?
EN

Stack Overflow用户
提问于 2022-10-07 20:34:17
回答 2查看 144关注 0票数 5

当我反复运行这段代码时,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
srand 1;
my @x = (1..1000).pick: 100;
say sum @x;

每次我都会得到不同的答案。如果我用srand重置,为什么不每次都产生相同的随机数呢?

该错误发生在REPL中。

此错误发生在此文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use v6.d;

srand 1;
my $x = rand;
say $x; # OUTPUT: 0.5511548437617427

srand 1;
$x = rand;
say $x; # OUTPUT: 0.308302962221659

say $*KERNEL;  # OUTPUT: darwin

我在用:

欢迎来到Rakudo™v2022.07。实现Raku编程语言v6.d。构建在MoarVM版本2022.07上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-22 14:15:15

(这个答案是对基于这个问题打开的GitHub问题中jnthn的评论的转述)。

设置srand 1将导致产生相同的随机数序列--也就是说,第n个随机数将是相同的。但是,由于Raku (真的,Rakudo和/或MoarVM,假设您使用的是这些后端)在内部使用随机数,所以您在这个序列中并不总是处于相同的位置(也就是说,您的n可能是不同的),因此您可能不会得到相同的随机数。

Rakudo的优化器使这一问题更加复杂。天真地,在程序后面重复相同的代码应该会消耗相同数量的序列随机数。但是,优化器很可能会从后续调用中删除其中一些随机数的使用,这会导致不同的随机数。

我不清楚当前行为与Rakudo/MoarVM实现中的bug之间的关系;更多细节请参见以前有关联的问题

票数 1
EN

Stack Overflow用户

发布于 2022-10-08 01:37:13

它应该一直为给定的代码生成相同的数字。我也无法以任何方式重现你的观察。

不过,引擎盖下面可能有什么可怕的东西在发生:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ raku -e 'srand 1; (my $x = (1..1000).pick(1)).say'
(761)
$ raku -e 'srand 1; (my @x = (1..1000).pick(1)).say'
[471]

表面上,您会说这些值应该是相同的,因为每个值只生成一个值。但是很明显,一个不同的随机值实际上是在引擎盖下计算出来的,从而导致了明显不同的值。你的案子可能就是这样吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73994411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文