簡體   English   中英

讓我們使用 0 和 1 創建一個 RandomFunction

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM