简单的问题,但我对这里的细微差别感兴趣.
我使用我自己提出的以下方法生成随机布尔值:
const rand = Boolean(Math.round(Math.random()));
Run Code Online (Sandbox Code Playgroud)
每当random()出现时,似乎总会有一个陷阱 - 它不是真正随机的,它会被某种东西或其他东西所破坏等等.所以,我想知道:
a)以上是最佳实践方法吗?
b)我是否在思考事物?
c)我是否解开了事情?
d)我不知道有更好/更快/更优雅的方式吗?
(如果B和C相互排斥,也有点兴趣.)
更新
如果它有所不同,我将其用于移动AI角色.
根据此Stack Overflow线程,JavaScript中的Math.random()取决于浏览器或操作系统.基本上,它意味着JavaScript没有用于生成均匀随机变量的标准算法.这个帖子似乎暗示Chrome的统一随机数算法特别糟糕.
在我的程序中,我尝试了解用户基于某些信息加上随机噪声的行为.我对Math.random()生成的数字使用Box-Muller变换来生成高斯随机数.这是否意味着使用一个浏览器的用户将遇到不同类型的噪音?注意我使用Box Muller因为我不关心速度,但我知道它对伪随机数的生成方式特别敏感.似乎有很多线程关于为什么Math.random()是坏的,但在线程中并没有太多关于实际使用的内容.什么是最佳做法?有什么东西我应该特别注意,因为我使用Box-Muller转换为高斯数字?
在JavaScript中,是否可以从另一个数字生成一个随机数?
我正在尝试为我的一个分形地形生成器实现一个可预测的随机数生成器.我已经知道可以使用Math.random()生成一个随机数,但我想创建一个随机数生成器,为每个输入生成一个输出.(例如,predictableRandomGenerator(1)总是会产生相同的结果,这不一定与输入相同.)
那么是否可以从另一个数字生成一个随机数,其中每个输入的输出总是相同的?
对于不同的JavaScript实现Math.random:
抛开记忆和长度问题,以下最终会有一个永远重复的数字序列(例如,它只取决于内部种子,当种子回到它的起始点时,数字会重复)?
sequence = Math.random();
while(true){
sequence += ', ' + Math.random();
}
Run Code Online (Sandbox Code Playgroud)
每个客户端是否具有相同的重复序列(例如,客户端不将特定于客户端的数据合并到随机数生成过程中)?
我问,因为如果可能的数字序列是有限的子集,那么像生成具有Math.random的UUID这样的事情将有更大的碰撞机会.