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

在javascript中生成随机整数的最快方法是什么?,javascript,math,random,floating-point,integer,Javascript,Math,Random,Floating Point,Integer,通常,这是javascript中获得随机数的方式 Math.random(); 然而,当涉及到生成随机整数时,这种方法似乎效率低下 首先,随机函数必须生成一个随机十进制数,如0.1036098338663578,然后必须将其乘以适当的范围(10.464593220502138)。最后,floor函数减去小数得出结果(在本例中为10) 有没有更快的方法在javascript中生成随机整数 编辑1: 我用它来创建一个画布HTML5游戏。FPS大约是50,我的代码非常优化,除了生成一个随机数 不

通常,这是javascript中获得随机数的方式

Math.random();

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

首先,随机函数必须生成一个随机十进制数,如0.1036098338663578,然后必须将其乘以适当的范围(10.464593220502138)。最后,floor函数减去小数得出结果(在本例中为10)

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


编辑1:
我用它来创建一个画布HTML5游戏。FPS大约是50,我的代码非常优化,除了生成一个随机数

不,没有更简单或更短的方法。如果需要多次创建函数,您可以创建一个函数。

您的方法是在javascript中检索随机整数的正确方法,不要担心性能,它会运行得很快。

此代码速度更快。。。打字

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)列表。是最容易实现的,而且可能在性能方面也是最有效的。然而,你需要充分理解这个问题,才能写出一个有效的问题。不过,这可能不值得努力。JS实现应该足够有效。最后,您很可能会发现
Math.random()
的运行速度比您的代码快。

我通常使用

const getRandomInt = (base = 10) => {
  return Math.floor(Math.random() * base)
}
    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);

这是最短的一行随机数生成器代码

rnd=(a,b)=>~~(Math.random()*(b-a))+a
如何使用:rnd(最小值、最大值) 示例:rnd(10100)

以下是我使用的:

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")
}

“然而这种方法似乎效率低下”-你测量过吗?你需要多快?有了上面的代码,我可以在我的旧笔记本电脑上以500毫秒的速度获得10万个随机数。在大多数语言中,你都需要一个随机数生成器,通过对一些素数进行播种和修改。但是,在JavaScript中,对语言求值的开销比调用Math.random()之类的函数的开销要大,这意味着本机调用几乎总是比您可以实现的任何调用都要快。请尝试在变量中保存画布宽度,而不是每次都访问它。可能就是这么简单。除了chromehmm,有趣的是,它在几乎所有方面都运行得非常快。我这样做通常是因为我很懒,而且它更容易阅读。@cWolfs我刚刚在firefox中运行了它,得到了相同的结果@Rasu不预分配阵列。对于一个非常大的数组,你可以快1000倍:)@DaggNabbit在node js中花了50多秒,然后我不得不停止它!因为节点必须在运行时更改百万项的数组元素的默认类型。但是没有预先分配就生成100万个项目需要大约100毫秒!因为它根据第一个值的类型预先分配自己。通过在javascript中预分配,您可以获得更高的性能。这是一种比以前的答案更合适的方法。这是一种比以前的答案更“让我们忽略Dagg Nabbit已经发布了几乎完全相同的答案”的方法。虽然您的代码“有效”,但它几乎是Dagg Nabbit答案的复制品。在这种情况下,我建议对他的答案进行编辑,而不是将其作为您自己的答案发布。您听说过在代码段中使用注释吗?
Math.random()*(max-min)+min
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
if(getRandomInt(420) == 69){
console.log("nice")
}