Какой самый быстрый способ генерировать случайное целое число в JavaScript?
Обычно это то, как вы получаете случайное число в JavaScript.
Math.random();
Однако этот метод кажется неэффективным, когда речь идет о генерации случайных целых чисел.
Во-первых, случайная функция должна генерировать случайное десятичное число, например 0.1036098338663578, затем она должна быть умножена до подходящего диапазона (10.464593220502138). Наконец, функция floor вычитает десятичные дроби, чтобы получить результат (в данном случае 10).
var random_integer = Math.floor(Math.random()*101);
Есть ли более быстрый способ генерировать случайные целые числа в JavaScript?
Edit1:
Я использую это для создания холста HTML5-игры. FPS составляет около 50, и мой код довольно оптимизирован, кроме генерации случайного числа.
8 ответов
Этот код быстрее... печатать.
var random_integer = Math.random()*101|0;
Это не будет работать правильно для огромных чисел, хотя.
(и он не работает быстрее, по крайней мере, в Chrome.)
Вы могли бы достичь гораздо большей скорости во время игры, если бы вы генерировали случайные числа заранее.
for (var i=1e6, lookupTable=[]; i--;) {
lookupTable.push(Math.random()*101|0);
}
function lookup() {
return ++i >= lookupTable.length ? lookupTable[i=0] : lookupTable[i];
}
lookup
будет вращаться через массив с миллионом случайных чисел. Это намного быстрее, чем звонить random
а также floor
(конечно, существует штраф за "время загрузки" сразу после создания таблицы поиска).
Если вы хотите избежать вычисления с плавающей запятой, то вы можете сделать это, написав собственный генератор псевдослучайных чисел. Вот список известных генераторов псевдослучайных чисел (PRNG). Линейный конгруэнтный генератор является самым простым в реализации и, вероятно, наиболее эффективным с точки зрения производительности. Тем не менее, вам нужно понять теорию, лежащую в основе PRNG, достаточно хорошо, чтобы написать эффективную. Это может не стоить усилий, хотя. Реализация JS должна быть достаточно эффективной. В конце есть высокая вероятность того, что вы найдете Math.random()
работает быстрее, чем ваш код.
Вот что я использую:
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
Пример того, как это будет использоваться, будет
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
if(getRandomInt(420) == 69){
console.log("nice")
}
Ваш путь - это правильный способ получить случайное целое число в javascript, не беспокойтесь о производительности, он будет работать быстро.
Нет, нет более простого или короткого пути. Вы можете создать функцию, если вам нужно сделать это несколько раз.
Я в основном использую
var a = Math.floor(Math.random((number you'd like to be minimum, (number you'd like to be maximum) * (number you'd like to be maximum);
const getRandomInt = (base = 10) => {
return Math.floor(Math.random() * base)
}
Это самый короткий однострочный код генератора случайных чисел.
rnd=(a,b)=>~~(Math.random()*(b-a))+a
Как использовать: rnd(min,max) Пример: rnd(10,100)