[英]Let's create a RandomFunction using 0 and 1
我上次問過你,但我解決不了。
我有一個隨機返回 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
}
這是我寫的代碼。 我可以更改為更好的代碼嗎?
謝謝。
https://arxiv.org/pdf/1304.1916v1.pdf 中描述的FastDiceRoller
算法為您提供隨機均勻(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
的二進制數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.