我问你最后一次,但我解决不了。
我有随机返回0和1的功能
const get_zero_or_one = () => {
return Math.floor(Math.random() * (2))
}
我想用上面的功能,使一个随机函数。但是,如果没有的Math.random(除get_zero_or_one以上使用)。
const RandomResult = (max_number) => {
let answer = 0;
for (let i = 0; i < max_number -1; i++) {
answer += get_zero_or_one()
}
return answer
}
这是我写的代码。我可以改变,以更好的代码?
谢谢。
在FastDiceRoller
描述的https://arxiv.org/pdf/1304.1916v1.pdf算法给你一个随机均匀(ISH)分布。
下面是一个实现从使用功能纸撕开:
function fastDiceRoller(max_number){
v = 1
c = 0
while(true){
v = 2*v
c = 2*c + get_zero_or_one()
if(v >= max_number){
if(c < max_number) { return(c) }
v = v - max_number
c = c - max_number
}
}
}
这里是从一百万运行某些频率:
Map {
0 => 100327,
1 => 99930,
2 => 100389,
3 => 99824,
4 => 100116,
5 => 99999,
6 => 99700,
7 => 99957,
8 => 99980,
9 => 99778 }
希望帮助。
本质上,它使用您的函数来建立一个二进制数小于max_number
。