我有这个(伪代码):
var a = Math.random(); // returns random number from 0 to 1
我希望更有可能选择较低的数字,就像图片所描述的那样。等式(代码)应该如何?
答案 0 :(得分:4)
最简单的方法是进行拒绝抽样。
基本上你模拟一个二维变量(x,y)=(Math.random(),Math.random())。它是平方[0,1] [0,1]中的一个点。如果变量(x,y)在您绘制的三角形中,则取x。
x将具有您正在寻找的发行版。
伪代码:
x = Math.random();
y = Math.random();
if x+y < 1:
return x;
你实际上可以通过仅绘制一个随机变量(通过计算和反转累积分布函数)来逃避它,但在这种情况下这要复杂得多。
答案 1 :(得分:1)
反向累积分布函数给出
1 - Math.sqrt(1 - Math.random()),
所以
1 - Math.sqrt(Math.random())
会为您提供所需的发布。
请注意,0处的概率密度必须为2,以便曲线下面积的概率为1。