提问人:Ives 提问时间:3/16/2023 最后编辑:Moritz RinglerIves 更新时间:3/16/2023 访问量:67
Math.random 搞砸了概率吗?
Math.random is messing with probablity?
问:
所以我在修补异步东西时写了这段代码,偶然发现了一个谜题。我知道我只是错过了什么,但我只是想把这个说出来,看看我的推理是否合理!
我做了一个游戏,基本上是从 1-4 生成一个数字,并试图连续 7 次获得 3 或更少的数字(由超时表示)(由 7 次 bgColor 更改表示以使其做某事)。
这就是概率的来源:从四分之三中得到 3 分或更少的概率 = 3/4 或 .75,75% 无论你喜欢什么。
连续发生 7 次的概率是 (3/4)^7 或 .13348
我以 200 的采样率运行了这段代码。最初,该比率保持在 .13 左右,大约有 4 次“胜利”,然后飙升到 .26,几乎正好是 2(.133)!我想知道在 Math.random 代码的某个地方我可以找到这个?有没有人让我思考?这是我给 SO 发的第一篇帖子!提前致谢!
const delayColor = (color) => {
let delay = Math.floor(Math.random()*5)*10;
return new Promise ((resolve, reject) => {
if(delay <= 30){
setTimeout(()=>{
document.body.style.backgroundColor = color;
console.log(delay)
resolve(`${color}`)
}, delay)}
else {
setTimeout(()=>{
document.body.style.backgroundColor = 'black';
console.log(delay)
reject(`${color}`)
}, delay)
}
})
}
let success = 0;
let total = 0;
let restarts = 0;
let wins = 0;
function clearRainbow(){
success = 0;
total = 0;
}
async function rainbow(){
try {
await delayColor('red');
success++;
total++;
await delayColor('orange');
success++;
total++;
await delayColor('yellow');
success++;
total++;
await delayColor('green');
success++;
total++;
await delayColor('blue');
success++;
total++;
await delayColor('indigo');
success++;
total++;
await delayColor('violet');
success++;
total++;
console.log('7 In a ROW!');
wins++;
console.log(`Your ratio: ${success} / ${total} (${success/total}) requiring ${restarts} for a total ratio of: ${wins/restarts}`)
console.log(`wins: ${wins}, Restarts: ${restarts}`)
clearRainbow();
if (wins<=200){
rainbow();
}
else {
clearRainbow();
}
}
catch (e){
console.log('Timed Out, Starting Again!')
total++;
restarts++;
rainbow()
}
}
我试着运行它一堆,并期望“总比率”或连续 3 次获得 4 次或更少 7 次的总体概率是 .13 的计算值,并且从 Math.random() 获得一致的 .26......
我想知道它,但不知道去哪里看。
答: 暂无答案
评论
Math.floor(Math.random()*5)
Math.floor(Math.random()*5) <= 3