Какой самый быстрый способ генерировать случайное целое число в JavaScript? - PullRequest
14 голосов
/ 08 января 2012

Обычно так вы получаете случайное число в javascript.

Math.random();


Однако этот метод кажется неэффективным, когда речь идет о генерации случайных целых чисел.

Во-первых,случайная функция должна генерировать случайное десятичное число, например 0.1036098338663578 , затем ее необходимо умножить на подходящий диапазон ( 10.464593220502138 ).Наконец, функция floor вычитает десятичные дроби, чтобы получить результат (который в данном случае 10 ).

var random_integer = Math.floor(Math.random()*101);

Есть ли более быстрый способ генерировать случайные целые числа в javascript?

Edit1:

Я использую это для создания HTML5-игры на холсте.FPS составляет около 50, и мой код довольно оптимизирован, кроме генерации случайного числа.

Ответы [ 6 ]

21 голосов
/ 08 января 2012

Этот код быстрее ... набирать.

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 (конечно, штраф за "время загрузки" заранее генерируется из таблицы поиска).

2 голосов
/ 08 января 2012

Если вы хотите избежать вычисления с плавающей запятой, вы можете сделать это, написав собственный генератор псевдослучайных чисел. Здесь - список известных генераторов псевдослучайных чисел (PRNG). Линейный конгруэнтный генератор является самым простым в реализации и, вероятно, наиболее эффективным с точки зрения производительности.Однако вам нужно будет понять теорию , лежащую в основе PRNG , достаточно хорошо, чтобы написать эффективную.Это может не стоить усилий, хотя.Реализация JS должна быть достаточно эффективной.В конце концов, есть большая вероятность, что Math.random() работает быстрее, чем ваш код.

2 голосов
/ 08 января 2012

Ваш путь - это правильный способ получить случайное целое число в javascript, не беспокойтесь о производительности, он будет работать быстро.

1 голос
/ 14 ноября 2017

я в основном использую

    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);
1 голос
/ 08 января 2012

Нет, нет более простого или короткого пути. Вы можете создать функцию, если вам нужно сделать это несколько раз.

0 голосов
/ 09 июня 2017
const getRandomInt = (base = 10) => {
  return Math.floor(Math.random() * base)
}
...