Привет, я размещаю здесь резюме из многих источников в Интернете для различных решений «доступ запрещен»: большинство информации можно найти здесь (включая необходимые требования) - sysinternal help
удачи, надеюсь, это сэкономит время.
На странице Mozilla Developer Network есть несколько примеров:
/**
* Returns a random number between min (inclusive) and max (exclusive)
*/
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
/**
* Returns a random integer between min (inclusive) and max (inclusive).
* The value is no lower than min (or the next integer greater than min
* if min isn't an integer) and no greater than max (or the next integer
* lower than max if max isn't an integer).
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Вот логика за этим. Это простое правило из трех:
Math.random ()
возвращает Число
от 0 (включительно) до 1 (исключая). Итак, у нас есть такой интервал:
[0 .................................... 1)
Теперь нам нужно число от min
(включительно) до max
(исключая):
[0 .................................... 1)
[min .................................. max)
Мы можем использовать Math.random
для получения корреспондента в интервале [min, max). Но, сначала мы должны немного разложить проблему на множители, вычтя мин
из второго интервала:
[0 .................................... 1)
[min - min ............................ max - min)
Это дает:
[0 .................................... 1)
[0 .................................... max - min)
Теперь мы можем применить Math.random
, а затем вычислить соответствующее . Давайте выберем случайное число:
Math.random()
|
[0 .................................... 1)
[0 .................................... max - min)
|
x (what we need)
Итак, чтобы найти x
, мы должны сделать:
x = Math.random() * (max - min);
Не забудьте добавить обратно min
, чтобы мы получили число в интервале [min, max):
x = Math.random() * (max - min) + min;
Это была первая функция из MDN. Второй возвращает целое число от min
до max
включительно.
Теперь для получения целых чисел вы можете использовать round
, ceil
или этаж
.
Вы можете использовать Math.round (Math.random () * (max - min)) + min
, однако это дает нечетное распространение. Обе,
, Math.floor округляет число в меньшую сторону до ближайшего целого числа
function generateRandomInteger (min, max) {
return Math.floor(random(min,max))
}`
Так для генерации случайного целого числа между 4 и 8 содержащих, вызовите вышеупомянутую функцию со следующими аргументами:
generateRandomInteger (4,9)
Стать crypto-сильным случайное целое число в диапазоне [x, y] попытка
let rand= (x,y)=> x+(y-x+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
console.log(rand(4,8))
Мой метод генерации случайного числа между 0 и n (n исключенный):
Math.floor((Math.random() * 10) % n)
IonuИ› G. Stan записал большой ответ, но это было немного слишком сложно для меня для схватывания. Так, я нашел еще более простое объяснение тех же понятий в https://teamtreehouse.com/community/mathfloor-mathrandom-max-min-1-min-explanation Jason Anello.
ПРИМЕЧАНИЕ: единственная важная вещь необходимо знать прежде, чем читать, объяснение Jason является определением "усеченных". Он использует тот термин при описании Math.floor()
. Оксфордский словарь определяет "усеченный" как:
Сокращаются (что-то) путем отключения вершины или конца.
function getRandomizer(bottom, top) {
return function() {
return Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom;
}
}
использование:
var rollDie = getRandomizer( 1, 6 );
var results = ""
for ( var i = 0; i<1000; i++ ) {
results += rollDie() + " "; //make a string filled with 1000 random numbers in the range 1-6.
}
разбивка:
Мы возвращаем функцию (заимствованную из функционального программирования), которая при вызове вернет случайное целое число между значениями bottom
] и верх
включительно. Мы говорим «инклюзивный», потому что хотим включить в диапазон чисел, которые могут быть возвращены, как нижнюю, так и верхнюю часть. Таким образом, getRandomizer (1, 6)
вернет 1, 2, 3, 4, 5 или 6.
(внизу - меньшее число, вверху - большее число)
Math.random() * ( 1 + top - bottom )
Math. random ()
возвращает случайное удвоение между 0 и 1, и если мы умножим его на единицу плюс разницу между top
и bottom
, мы получим удвоение где-то между 0
и 1 + ba
.
Math.floor( Math.random() * ( 1 + top - bottom ) )
Math.floor
округляет число до ближайшего целого. Итак, теперь у нас есть все целые числа от 0
до сверху-снизу
. 1 выглядит сбивающим с толку, но он должен быть там, потому что мы всегда округляем в меньшую сторону, поэтому без него невозможно достичь верхнего числа. Случайное десятичное число, которое мы генерируем, должно быть в диапазоне от 0
до (1 + верх-низ)
, чтобы мы могли округлить в меньшую сторону и получить int в диапазоне 0
to top-bottom
Math.floor( Math.random() * ( 1 + top - bottom ) ) + bottom
Код в предыдущем примере дал нам целое число в диапазоне 0
и top-bottom
, поэтому все, что нам нужно сделать сейчас, это добавьте bottom
к этому результату, чтобы получить целое число в диапазоне bottom
и top
включительно. : D
ПРИМЕЧАНИЕ: Если вы сначала передадите нецелое значение или большее число, вы получите нежелательное поведение, но если кто-то этого не попросит, я не буду углубляться в код проверки аргументов, так как он довольно далек от цели исходного вопроса.
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
function getRandomInt(lower, upper)
{
//to create an even sample distribution
return Math.floor(lower + (Math.random() * (upper - lower + 1)));
//to produce an uneven sample distribution
//return Math.round(lower + (Math.random() * (upper - lower)));
//to exclude the max value from the possible values
//return Math.floor(lower + (Math.random() * (upper - lower)));
}
Чтобы протестировать эту функцию и ее варианты, сохраните приведенный ниже HTML / JavaScript в файл и откройте его в браузере. Код создаст график , показывающий распределение одного миллиона вызовов функций. Код также будет записывать крайние случаи, поэтому, если функция выдает значение больше максимального или меньше минимального, you.will.know.about.it.
<html>
<head>
<script type="text/javascript">
function getRandomInt(lower, upper)
{
//to create an even sample distribution
return Math.floor(lower + (Math.random() * (upper - lower + 1)));
//to produce an uneven sample distribution
//return Math.round(lower + (Math.random() * (upper - lower)));
//to exclude the max value from the possible values
//return Math.floor(lower + (Math.random() * (upper - lower)));
}
var min = -5;
var max = 5;
var array = new Array();
for(var i = 0; i <= (max - min) + 2; i++) {
array.push(0);
}
for(var i = 0; i < 1000000; i++) {
var random = getRandomInt(min, max);
array[random - min + 1]++;
}
var maxSample = 0;
for(var i = 0; i < max - min; i++) {
maxSample = Math.max(maxSample, array[i]);
}
//create a bar graph to show the sample distribution
var maxHeight = 500;
for(var i = 0; i <= (max - min) + 2; i++) {
var sampleHeight = (array[i]/maxSample) * maxHeight;
document.write('<span style="display:inline-block;color:'+(sampleHeight == 0 ? 'black' : 'white')+';background-color:black;height:'+sampleHeight+'px"> [' + (i + min - 1) + ']: '+array[i]+'</span> ');
}
document.write('<hr/>');
</script>
</head>
<body>
</body>
</html>