2017-05-30 89 views
-1

我有以下函数生成一个随机布尔值。 choose_direction:函数(){生成一个随机布尔值70%True,30%false

var random_boolean = Math.random() >= 0.5; 
    if (random_boolean) { 
     trade.call() 
     prev_trade.goingUp = true 
     console.log('Trade: CALL!!!!!!!!!!!!!!!!!!!!!!') 
    } else { 
     trade.put() 
     prev_trade.goingUp = false 
     console.log('Trade: PUT!!!!!!!!!!!!!!!!!!!!!!!!') 
    } 
} 

然而,我需要的分布是不公平的。更具体地说,我希望输出的时间为70%,假时间为30%。

+4

IMO只是检查'Math.random()> = 0.7'应该做的伎俩:) – atomrc

+2

@atomrc你的意思是'> = 0.3'? – TheDarkKnight

+0

[获得基于概率的随机数]的可能重复(https://stackoverflow.com/questions/39731632/get-random-number-based-on-probability) –

回答

5

而不是>= 0.5你只需要< 0.7

var random_boolean = Math.random() < 0.7; 
// 70% this will be true, 30% false 

由于@plasmacel评论,Math.random()返回01之间的值(包括0,但不1[0, 1)),所以因此我们做< 0.7

+0

@Ionica谢谢! – TSR

+1

@plasmacel的确,这是正确的!谢谢! :) –

1

让我们考虑一件事。 Math.random()给你一个伪随机数。

试试这个功能:

function randomTest(triesCount) { 
    var sum = 0; 
    for(var i = 0; i < triesCount; i++){ 
     sum += Math.random(); 
    } 
    return sum/triesCount; 
} 

,如果你有不同的triesCount参数尝试的结果将是:

  • randomTest(100) - 0.5189474703446081
  • randomTest(100) - 0.5189474703446081
  • randomTest(1000) - 0.4973368682657417
  • randomTest(10000) - 0.500 1058467610172
  • randomTest(100000) - 0.4987280984186288
  • randomTest(1000000) - 0.4999987387801045
  • randomTest(10000000) - 0.49998292815655454
  • randomTest(100000000) - 0.500079160302315

所以你可以SE结果去0.5这意味着这不是在这里产生的随机数。

虽然回答你的问题将是

VAR random_boolean =的Math.random()> = 0.3;

asIonicăBizău说。

但请记住它是伪随机数!

相关问题