让我们创建一个使用0和1 RandomFunction

问题描述 投票:-6回答: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
}

这是我写的代码。我可以改变,以更好的代码?

谢谢。

javascript
1个回答
-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.