平均特定数字的随机数

时间:2013-07-09 21:11:09

标签: c# algorithm random

看似简单,但我想要一个公式(.net最好):

对于一个给定的数字 - 比方说,1.5 - 该公式将输出一个随机数,取一个系列将平均大约1.5 ...所以它可能是0.1,1.2,7.1,2.5,.2等,但是平均值将接近1.5。

澄清:我希望这些数字是正面的。

3 个答案:

答案 0 :(得分:2)

public class RandomAroundAverage
    {
        Random r = new Random();
        public double Random(double middle, double scale)
        {
            return r.NextDouble() * scale - (scale / 2) + middle;
        }
    }

然后

var v = r.Random(1.5, 20);

它将生成随机数-8.5 - > 11.5

并在行动中看到它......

   var r = new RandomAroundAverage();
    var sum = 0.0;
    for (int i = 0; i < 10000; i++)
    {
        var v = r.Random(1.5, 20);
        sum += v;
        Console.WriteLine(string.Format("Value: {0} Average: {1}", v, sum/i)); 
    }

答案 1 :(得分:1)

有很多可行的方法。其中之一,总是积极的,是产生指数分布的值。生成具有指定均值的指数随机变量的算法是:

public static double ExpRV(double mean, Random rnd) {
   return -mean * Math.Log(rnd.NextDouble());
}

[编者注:转换为C#。]

当你发现一堆那些时,平均值应该非常接近mean

如果你需要一个有限范围的单个值,你需要一个不同的分布,但由于你没有指定它作为一个约束,这应该为你做。

答案 2 :(得分:0)

我认为你有来自targetAvg的三个参数,numPoints,targetAvg和maxDist。

在范围内随机选择numPoints点(2,2 * maxDist)。

计算平均值。

通过将targetAvg-avg添加到每个点来进行转换。

这将为您提供目标平均值附近的平均精确到目标的点数(尽可能接近浮点数)。