Math.random 搞砸了概率吗?

Math.random is messing with probablity?

提问人:Ives 提问时间:3/16/2023 最后编辑:Moritz RinglerIves 更新时间:3/16/2023 访问量:67

问:

所以我在修补异步东西时写了这段代码,偶然发现了一个谜题。我知道我只是错过了什么,但我只是想把这个说出来,看看我的推理是否合理!

我做了一个游戏,基本上是从 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......

我想知道它,但不知道去哪里看。

JavaScript 数学 随机

评论

9赞 Ben Stephens 3/16/2023
我在这里可能很愚蠢,但不会给你整数值 0-4(含),所以 5 次中有 4 次是正确的?Math.floor(Math.random()*5)Math.floor(Math.random()*5) <= 3
0赞 Maarten Bodewes 3/16/2023
是的,应该是乘以 4,然后加上 1。
0赞 Ives 3/17/2023
是的!你是对的!我知道这是一个更简单的解决方案!谢谢你们俩的快速回复!

答: 暂无答案