Ben*_*Ben 107 javascript random boolean
简单的问题,但我对这里的细微差别感兴趣.
我使用我自己提出的以下方法生成随机布尔值:
const rand = Boolean(Math.round(Math.random()));
Run Code Online (Sandbox Code Playgroud)
每当random()
出现时,似乎总会有一个陷阱 - 它不是真正随机的,它会被某种东西或其他东西所破坏等等.所以,我想知道:
a)以上是最佳实践方法吗?
b)我是否在思考事物?
c)我是否解开了事情?
d)我不知道有更好/更快/更优雅的方式吗?
(如果B和C相互排斥,也有点兴趣.)
更新
如果它有所不同,我将其用于移动AI角色.
Kel*_*vin 262
从技术上讲,代码看起来很好,但有点太复杂了.您可以直接将"Math.random()"与"0.5"进行比较,因为Math.random()的范围是[0,1].您可以将范围分为[0,0.5)和[0.5,1].
var random_boolean = Math.random() >= 0.5;
Run Code Online (Sandbox Code Playgroud)
Ale*_*ara 12
要获得更加加密的安全值,您可以crypto.getRandomValues
在现代浏览器中使用.
var randomBool = (function() {
var a = new Uint8Array(1);
return function() {
crypto.getRandomValues(a);
return a[0] > 127;
};
})();
var trues = 0;
var falses = 0;
for (var i = 0; i < 255; i++) {
if (randomBool()) {
trues++;
}
else {
falses++;
}
}
document.body.innerText = 'true: ' + trues + ', false: ' + falses;
Run Code Online (Sandbox Code Playgroud)
请注意,该crypto
对象是一个DOM API,因此它在Node中不可用,但Node 也有类似的API.
小智 10
!Math.round(Math.random());
Run Code Online (Sandbox Code Playgroud)
开尔文的回答给我留下了深刻的印象,我想建议一个相当相似但稍微增强的解决方案。
var randomBoolean = Math.random() < 0.5;
Run Code Online (Sandbox Code Playgroud)
这个解决方案读起来更明显一点,因为右边的数字<
告诉你得到true
而不是得到的概率false
,这更容易理解。也<
比>=
;短一个符号
归档时间: |
|
查看次数: |
60477 次 |
最近记录: |