平均事件时间计算不正确
Mean event time calculation incorrect
我有一个程序,其中一个事件随机发生。我正在尝试编写一些代码来计算和存储这些事件发生所需的平均时间。这是我用来计算平均值的代码:
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
Console.WriteLine("Event detected");
EventCount++;
s.Stop();
AverageMS+= s.ElapsedMilliseconds;
AverageMS /= EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
它显示的假定平均毫秒数看起来更接近个别时间而不是平均值。
以下是 100 个事件的示例:
http://pastebin.com/cmwQPqfR
您将平均值除以事件计数,这意味着您要一遍又一遍地除以。需要累加总数,然后每次重新计算平均值。
更多类似内容:
long TotalMS = 0;
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
s.Stop();
Console.WriteLine("Event detected");
EventCount++;
TotalMS+= s.ElapsedMilliseconds;
AverageMS = TotalMS / EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
请注意,您应该在 WriteLine 之前停止计时器,否则您也在为控制台操作计时。
你的计算有误。您应该将计数和总经过时间分开保存,并在需要时进行除法。如果您的运行时间为 1、3、5,请查看您在做什么。显然,平均值应该为 1、2 和 3。您将得到(EventCount =1;AverageMS = 1)。然后你会得到 EventCount = 2,AverageMS 加上 3 然后除以 2,所以 Average 是 (1+3)/2 = 2。然后 EVentCount 变为 3,Average MS = (2+5)/3 = 2.333 (现在出错了,应该是3)。如果下一个是 3,那么平均值将是 (2.333+3)/4 = 1.3333!。
只需将计数和 运行 总数分开即可解决。
我有一个程序,其中一个事件随机发生。我正在尝试编写一些代码来计算和存储这些事件发生所需的平均时间。这是我用来计算平均值的代码:
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
Console.WriteLine("Event detected");
EventCount++;
s.Stop();
AverageMS+= s.ElapsedMilliseconds;
AverageMS /= EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
它显示的假定平均毫秒数看起来更接近个别时间而不是平均值。
以下是 100 个事件的示例: http://pastebin.com/cmwQPqfR
您将平均值除以事件计数,这意味着您要一遍又一遍地除以。需要累加总数,然后每次重新计算平均值。
更多类似内容:
long TotalMS = 0;
int EventCount = 0;
var s = Stopwatch.StartNew();
while(true)
{
if (EventTriggered)
{
s.Stop();
Console.WriteLine("Event detected");
EventCount++;
TotalMS+= s.ElapsedMilliseconds;
AverageMS = TotalMS / EventCount;
Console.WriteLine("Current average ms: " + AverageMS);
s.Restart();
}
}
请注意,您应该在 WriteLine 之前停止计时器,否则您也在为控制台操作计时。
你的计算有误。您应该将计数和总经过时间分开保存,并在需要时进行除法。如果您的运行时间为 1、3、5,请查看您在做什么。显然,平均值应该为 1、2 和 3。您将得到(EventCount =1;AverageMS = 1)。然后你会得到 EventCount = 2,AverageMS 加上 3 然后除以 2,所以 Average 是 (1+3)/2 = 2。然后 EVentCount 变为 3,Average MS = (2+5)/3 = 2.333 (现在出错了,应该是3)。如果下一个是 3,那么平均值将是 (2.333+3)/4 = 1.3333!。
只需将计数和 运行 总数分开即可解决。