Каков самый быстрый способ генерации случайного целого в 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);