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

时间:2012-01-08 07:08:05

标签: javascript math random floating-point integer

通常这是你在javascript中获取随机数的方式。

Math.random();


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

首先,随机函数必须生成随机小数,如 0.1036098338663578 ,然后必须将其乘以合适的范围( 10.464593220502138 )。最后,floor函数减去小数以产生结果(在这种情况下, 10 )。

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

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


EDIT1:

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

8 个答案:

答案 0 :(得分:21)

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

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将在具有一百万个随机整数的数组中旋转。它比调用randomfloor much faster(当然,生成查找表时会有一个“加载时间”惩罚)。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

如果你想避免浮点计算,那么你可以通过编写自己的伪随机数生成器来做到这一点。 Here是众所周知的伪随机数生成器(PRNG)的列表。 Linear congruential generator是最容易实现的,也可能在性能方面最有效。但是,您需要了解theory behind PRNGs以便写出有效的文件。但这可能不值得努力。 JS实现应该足够有效。最后,您很可能会发现Math.random()的运行速度比您的代码快。

答案 3 :(得分:1)

不,没有更简单或更短的方式。但是,如果需要多次执行此操作,则可以创建一个函数。

答案 4 :(得分:1)

我主要使用

    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);

答案 5 :(得分:0)

const getRandomInt = (base = 10) => {
  return Math.floor(Math.random() * base)
}

答案 6 :(得分:0)

这是我使用的:

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

答案 7 :(得分:-1)

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

rnd=(a,b)=>~~(Math.random()*(b-a))+a

使用方法:rnd(min,max) 范例:rnd(10,100)