Javascript JS中生成随机数的较好算法
我的目标是在JavaScript中生成1到100之间的随机整数 我目前正在使用这个:Javascript JS中生成随机数的较好算法,javascript,random,Javascript,Random,我的目标是在JavaScript中生成1到100之间的随机整数 我目前正在使用这个: const random=Math.ceil(Math.random()*100) log(随机)两者产生几乎相同的结果。你可以做一个定量测试,看看画出来的数字的数量 const getRandomCeil=()=>Math.ceil(Math.random()*100),//0。。。100%不太可能 getRandomFloor=()=>Math.floor(Math.random()*100+1);//
const random=Math.ceil(Math.random()*100)
log(随机)
两者产生几乎相同的结果。你可以做一个定量测试,看看画出来的数字的数量
const
getRandomCeil=()=>Math.ceil(Math.random()*100),//0。。。100%不太可能
getRandomFloor=()=>Math.floor(Math.random()*100+1);//1.100
var i,
计数={ceil:{},楼层:{};
对于(i=0;i<1e7;i++){
value=getRandomCeil();
count.ceil[value]=(count.ceil[value]| | 0)+1;
值=getRandomFloor();
count.floor[value]=(count.floor[value]| | 0)+1;
}
控制台日志(计数)代码>
.as控制台包装{max height:100%!important;top:0;}
这两者之间有一个显著的区别
Math.ceil(Math.random() * 100)
Math.floor(Math.random() * 100 + 1)
第一个在理论上有可能以极小的概率产生0,第二个则没有。产生的数字在[0,1)
范围内,这意味着0包含在内,而1不包含在内。查看两种极端情况:
// When Math.random() returns 0
Math.ceil(0 * 100) // returns 0 since ceiling of 0 is 0
Math.floor(0 * 100 + 1) // returns 1
// When Math.random() returns 0.999999...
Math.ceil(0.999999 * 100) // returns 100
Math.floor(0.999999 + 1) // returns 100
ceil
变量可能在随机函数正好返回0时返回0;第一个示例生成0(含)到100(含)之间的数字,第二个示例生成1(含)到100(含)之间的数字。它们不一样。你修改了OP的公式。如果Math.random
返回0怎么办?我做了,但它可以忽略不计。@Jonaswills,对。但它的概率是多少?@nina我猜大概是1到2**63(64位浮点,假设负指数符号)