Каков самый быстрый способ генерации случайного целого в javascript?
Обычно так вы получаете случайное число в javascript.
Math.random();
Однако этот метод представляется неэффективным, когда речь идет о генерации случайных целых чисел.
Во-первых, случайная функция должна генерировать случайный десятичный знак, например 0.1036098338663578, тогда его необходимо умножить на подходящий диапазон (10.464593220502138). Наконец, функция floor вычитает десятичные числа для получения результата (который в этом случае 10).
var random_integer = Math.floor(Math.random()*101);
Есть ли более быстрый способ генерации случайных целых чисел в javascript?
Edit1:
Я использую это для создания холста HTML5-игры. FPS составляет около 50, и мой код довольно оптимизирован, кроме создания случайного числа.
Ответы
Ответ 1
Этот код быстрее... для ввода.
var random_integer = Math.random()*101|0;
Однако это не будет работать для огромных чисел.
(и он не работает быстрее, по крайней мере, не в хроме.)
Вы могли бы достичь гораздо более быстрой скорости во время игры, если вы заранее создали случайные числа.
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
(конечно, есть надпись "время загрузки" от создания таблицы поиска).
Ответ 2
Ваш путь - это правильный способ получить случайное целое в javascript, не беспокойтесь о его быстроте работы.
Ответ 3
Если вы хотите избежать вычисления с плавающей точкой, вы можете это сделать, написав собственный генератор псевдослучайных чисел. Здесь - список известных генераторов псевдослучайных чисел (PRNG). Линейный конгруэнтный генератор - самый простой способ реализовать и, вероятно, наиболее эффективный с точки зрения производительности. Однако вам нужно будет понять теорию позади PRNG достаточно хорошо, чтобы написать эффективную. Это, возможно, не стоило усилий. Реализация JS должна быть достаточно эффективной. В конце есть высокая вероятность того, что вы найдете Math.random()
работает быстрее, чем ваш код.
Ответ 4
Нет, нет более простого или более короткого пути. Вы можете создать функцию, если вам нужно сделать это несколько раз.
Ответ 5
const getRandomInt = (base = 10) => {
return Math.floor(Math.random() * base)
}
Ответ 6
По-видимому, sin()
быстрее, поэтому вы можете получить квази-случайное число с помощью:
Rand = function(seed) {
return {
random: function() {
var x = Math.sin(0.8765111159592828 + seed++) * 1e4
return x - Math.floor(x)
}
}
}
const rnd = Rand(Math.random()).random;
console.log(rnd())
console.log(rnd())
console.log(rnd())
Ответ 7
В основном я использую
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);