在javascript中生成随机整数的最快方法是什么?

use*_*294 14 javascript random math floating-point integer

通常这是你在javascript中获得随机数的方式.

Math.random();
Run Code Online (Sandbox Code Playgroud)


然而,当涉及生成随机整数时,这种方法似乎效率低下.

首先,随机函数必须生成一个随机小数,如0.1036098338663578,然后它必须乘以一个合适的范围(10.464593220502138).最后,floor函数减去小数以产生结果(在本例中为10).

var random_integer = Math.floor(Math.random()*101);
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法在JavaScript中生成随机整数?


EDIT1:

我用它来创建一个画布HTML5游戏.FPS大约是50,除了生成随机数之外,我的代码已经过优化.

Dag*_*bit 25

这段代码更快......输入.

var random_integer = Math.random()*101|0;
Run Code Online (Sandbox Code Playgroud)

但它不适用于大量数字.

(它不会运行得更快,至少不会在chrome中运行.)

如果你事先生成随机数,你可以在游戏中获得更快的速度.

for (var i=1e6, lookupTable=[]; i--;) {
  lookupTable.push(Math.random()*101|0);
}
function lookup() {
  return ++i >= lookupTable.length ? lookupTable[i=0] : lookupTable[i];
}
Run Code Online (Sandbox Code Playgroud)

lookup将通过具有一百万个随机整数的数组旋转.这是更快比调用randomfloor(当然,有一个"加载时间"处罚预先从生成查找表).

  • @DaggNabbit在节点js中花了超过50秒然后我不得不停止它!因为节点必须在运行时为百万个项目更改数组元素的默认类型.但是在没有预先分配的情况下生成100万件物品需要大约100毫秒!因为它按照第一个值的类型预先分配自己.通过在javascript中预分配[Typed arrays](https://developer.mozilla.org/en/docs/Web/JavaScript/Typed_arrays),您可以获得更高的性能. (3认同)
  • @Rasu不要预先分配数组.对于非常大的数组,你可以快1000倍:) (2认同)