我想在 JavaScript 中创建一个随机 boolean 值,但我想考虑之前的值。如果前一个值为真,我希望下一个值更有可能为真。目前我得到了这个(这是在闭包的上下文中 - goUp
和 lastGoUp
是包含范围的局部变量):
function setGoUp() {
goUp = getRandomBoolean();
if(lastGoUp) {
goUp = getRandomBoolean() || goUp;
}
else {
goUp = getRandomBoolean() && goUp;
}
lastGoUp = goUp;
}
所以,算法是这样的:
- 获取一个随机 boolean 值
如果上次调用的随机 boolean 值是 True:
a) 得到另一个随机 boolean 值,
或
将这两个放在一起b) 否则获取另一个随机 boolean 值,并将这些
和
放在一起。
我相信这个算法可以被简化。我想知道如何做:
if(lastGoUp && goUp) {
goUp = goUp * (getRandomBoolean() || goUp);
}
但这看起来真的很脏。
这个算法也有一个问题,这意味着我只能将再次获得相同 boolean 值的机会加倍——我不能轻易地调整它。有什么想法吗?
最佳答案
您应该定义所需的分布,但也许您正在寻找以下内容?
if (lastGoUp) {
goUp = Math.random() < 0.8;
} else {
goUp = Math.random() < 0.2;
}
关于javascript - 偏置随机 boolean 值的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3645964/