Я генерирую случайное число между минутой и макс. с этим кодом:
return min + (max - min) * Math.random();
И это работает. Однако случайные числа очень мало обычно между "1 или 3", даже если макс. равняется 80.
Как я могу лучше распределить случайные числа по всему диапазону?
спасибо
Я очень уверен, что опубликованный вами код return min + (max - min) * Math.random ();
должен возвращать равномерно распределенное случайное число между min (включительно) и max (исключая). Нет причин, по которым он будет возвращаться между 1 и 3 .. Вы пытались отследить min и max, чтобы убедиться, что это те числа, которые вы думаете?
Math.random () возвращает случайное число между значениями 0,0 и 1,0 . Чтобы сгенерировать случайное целое число от 1 до MAX (которое, я полагаю, нужно для U), попробуйте следующее:
Math.ceil(Math.random()*MAX);
Подробнее о Math.Random () см .:
Чтобы сгенерировать случайное целое число от MIN до MAX. Попробуйте следующее:
MIN + Math.round (Math.random () * (MAX-MIN));
Для генерации случайного десятичного числа (числа с плавающей точкой ) между MIN и MAX. Попробуйте следующее:
MIN + Math.random () * (MAX-MIN));
Попробуйте следующее:
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.