如何实现非随机的随机数生成器?

我需要一个随机数生成器,它在n和m之间产生不同的数字,但是没有相同的概率。 我想在n和m之间设置一个值x,其中可能性最高:

在此处输入图像描述

使用Random类有一种简单的方法吗? 可能性应该具有二项式分布或类似的forms(其精确的二项式分布并不重要,粗略近似也可以)

编辑

也许我必须澄清:我不是在寻找二分法或高斯分布,而是在寻找这样的东西: 在此处输入图像描述

我想定义值x应该是最高可能性的值。

编辑

不幸的是,我之前接受的答案似乎并不起作用 。 所以我还在寻找答案!

您可以使用Box-Muller变换从一系列数字生成一系列伪随机正态分布数,这些数字在0和1之间均匀分布。

Box-Muller变换

Java SDK具有良好的实现Random.nextGaussian(取自http://download.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian ())

我希望很清楚如何从java源解析为c#

 synchronized public double nextGaussian() { if (haveNextNextGaussian) { haveNextNextGaussian = false; return nextNextGaussian; } else { double v1, v2, s; do { v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0 v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0 s = v1 * v1 + v2 * v2; } while (s >= 1 || s == 0); double multiplier = Math.sqrt(-2 * Math.log(s)/s); nextNextGaussian = v2 * multiplier; haveNextNextGaussian = true; return v1 * multiplier; } } 

更新:我如何改变中位数:

 public static float gaussianInRange(float from, float mean, float to) { if( !(from < mean && mean < to) ) throw new IllegalArgumentException(MessageFormat.format("RandomRange.gaussianInRange({0}, {1}, {2})", from, mean, to)); int p = _staticRndGen.nextInt(100); float retval; if (p < (mean*Math.abs(from - to))) { double interval1 = (_staticRndGen.nextGaussian() * (mean - from)); retval = from + (float) (interval1); } else { double interval2 = (_staticRndGen.nextGaussian() * (to - mean)); retval = mean + (float) (interval2); } while (retval < from || retval > to) { if (retval < from) retval = (from - retval) + from; if (retval > to) retval = to - (retval - to); } return retval; } 

您需要一个处理“正态分布”的生成器。 看看这里: http : //www.csharpcity.com/reusable-code/random-number-generators/

smth比较简单。 您可以生成2个随机数:1st定义第二个随机数与x的接近程度。

您可以使用您喜欢的任何断点/function级别。