Actionscript-3 случайные числа между макс и мин - PullRequest
7 голосов
/ 18 апреля 2010

Я генерирую случайное число между min и max с помощью этого кода:

return min + (max - min) * Math.random();

И это работает. Однако случайные числа обычно очень малы между «1 или 3», даже если максимальное значение равно 80.

Как лучше распределить случайные числа по всему диапазону?

спасибо

Ответы [ 5 ]

7 голосов
/ 29 апреля 2010

Я очень уверен, что код, который вы разместили, return min + (max - min) * Math.random(); , должен возвращать равномерно распределенное случайное число между min (включительно) и max (эксклюзивно). Нет никаких причин, по которым он возвращался бы между 1 и 3. Вы пробовали отследить мин и макс, чтобы убедиться, что это те числа, о которых вы думаете?

2 голосов
/ 18 апреля 2010

Math.random ()


Math.random () возвращает случайное число между значениями 0.0 и 1.0 . Чтобы сгенерировать случайное целое число от 1 до MAX (которое я предполагаю, что вы хотите), попробуйте это:

Math.ceil(Math.random()*MAX);

Подробнее о Math.Random () см .:

Официальный ActionScript Documentaion

  • Чтобы сгенерировать случайное целое число от MIN до MAX, попробуйте следующее:
    MIN + Math.round (Math.random () * (MAX-MIN));

  • Чтобы сгенерировать случайное десятичное число (число с плавающей точкой) между MIN и MAX, попробуйте следующее:
    MIN + Math.random () * (MAX-MIN));

1 голос
/ 18 апреля 2010

Попробуйте это:

package util
{
public class RandomNumberHelper
{
    public static function randomIntRange(start:Number, end:Number):int
    {
        return int(randomNumberRange(start, end));
    }

    public static function randomNumberRange(start:Number, end:Number):Number
    {
        end++;
        return Math.floor(start + (Math.random() * (end - start)));
    }
}
}

...

protected function testRandomIntsInRange(start:int, end:int):void
{
    var randomIntsAssigned:Object = {};
    var randomInt:int = 0;
    for (var i:int = 0; i < 10000; i++)
    {
        randomInt = RandomNumberHelper.randomIntRange(start, end);

        if (!randomIntsAssigned.hasOwnProperty(randomInt))
            randomIntsAssigned[randomInt] = 0;

        randomIntsAssigned[randomInt]++;
    }
    trace(randomIntsAssigned);
}

Я получаю довольно равномерное распределение от 0 до 9. Как минимум

0 голосов
/ 21 марта 2014

попробуйте это.

function randomRange(minNum:Number, maxNum:Number):Number 
{
    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
0 голосов
/ 21 декабря 2013
number = (400 - (Math.floor(Math.random()*110)));

400 = max
110 = min
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...