增加偶数的机会

时间:2011-05-07 12:56:48

标签: actionscript-3 math actionscript

如果我得到一个随机数字,我如何增加使该随机数为偶数的机会。我不想每次都做到这一点。我只是想生成一个随机数,比如...%70的时间或%90%的时间。

    private function randNum (high, low) {
        return Math.floor(Math.random() * (1+high-low)) + low;
    }

我会向这个函数传递更大范围的数字吗?或者我是否必须完全取消此功能?

谢谢

2 个答案:

答案 0 :(得分:4)

private function randNum (high : Number, low : Number) : int
{
    var even : Boolean = Math.random() < 0.7; //set probability of even number here
    var rand : int = Math.floor(Math.random() * (1+high-low)) + low;
    if (even)
        while (rand % 2 != 0)
            rand = Math.floor(Math.random() * (1+high-low)) + low;
    else
        while (rand % 2 != 1)
            rand = Math.floor(Math.random() * (1+high-low)) + low;
    return rand;
}

测试:

var even : int = 0;
var odd : int = 0;
for (var i : int = 0; i < 100000; i++)
{
    var a : int = randNum(1, 20);
    if (a % 2 == 0)
        even++;
    else
        odd++;
}
trace(even, odd);

输出:

[trace] 69869 30131

答案 1 :(得分:2)

有点太晚了;)但是另一个没有循环并使用位屏蔽操作:

ret & -2会使您的号码均匀,然后根据(Math.random() >= evenProbability)的结果,您将低位设置为1以给出奇数

function randomRange(low:int, high:int, evenProbability:Number = 0.5):int{
     var ret:int = int( Math.random() * ( 1 + high - low ) ) + low
     return ( ret & -2 ) | int( Math.random() >= evenProbability )
}

这是一个使用wonderfl的实时测试:http://wonderfl.net/c/9IHx