Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS中生成随机数的较好算法_Javascript_Random - Fatal编程技术网

Javascript JS中生成随机数的较好算法

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

我的目标是在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);//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位浮点,假设负指数符号)