看似简单,但我想要一个公式(.net最好):
对于一个给定的数字 - 比方说,1.5 - 该公式将输出一个随机数,取一个系列将平均大约1.5 ...所以它可能是0.1,1.2,7.1,2.5,.2等,但是平均值将接近1.5。
澄清:我希望这些数字是正面的。答案 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添加到每个点来进行转换。
这将为您提供目标平均值附近的平均精确到目标的点数(尽可能接近浮点数)。