随机但很可能1浮动

Sol*_*r42 8 java random math

我想随机化一个浮动,这样

  • 有95%的机会约为1
  • 有0.01%的几率<0.1或> 1.9
  • 它永远不会变成0或2

Random.nextFloat()例如,这可以通过多次使用来实现吗?

概率的直观说明:

概率的视觉说明

Dan*_*tin 7

你需要找到一个函数f,这样:

  1. f是连续的并且在[0,1]上增加

  2. f(0)> 0且f(1)<2

  3. f(0.01)> = 0.1且f(0.99)<= 1.9

  4. 对于0.025 <= x <= 0.975,f(x)为"约1"

然后拿走 f(Random.nextDouble())

例如,Math.tan(3*(x-0.5))/14.11适合这个,所以对于你的表达我会使用:

Math.tan(3*(Random.nextDouble()-0.5))/14.11
Run Code Online (Sandbox Code Playgroud)

概率分布如下:

Wolfram云会话

  • 请注意,在95%的情况下,这可能不足以达到1的目的(95%的范围实际上是[0.5,1.5]),因此您可以尝试使用不同的函数,例如`double t = Math.黄褐色(3*Random.nextDouble() - 0.5); return t*t*t/2805.0;` (2认同)