C# 平均事件时间计算不正确
我有一个程序,其中一个事件随机发生。我试图编写一些代码来计算和存储这些事件发生所需的平均时间。以下是我用来计算平均值的代码:C# 平均事件时间计算不正确,c#,math,C#,Math,我有一个程序,其中一个事件随机发生。我试图编写一些代码来计算和存储这些事件发生所需的平均时间。以下是我用来计算平均值的代码: int EventCount = 0; var s = Stopwatch.StartNew(); while(true) { if (EventTriggered) { Console.WriteLine("Event detected"); EventCount++; s.Stop();
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个事件的示例:
您将平均值除以事件计数,这意味着您将一次又一次地除以。您需要累计总数,然后每次重新计算平均值 更像这样:
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();
}
}
请注意,您应该在写入线之前停止计时器,否则也会对控制台操作计时。您的计算是错误的。您应该单独保存计数和总运行时间,并在需要时进行除法。如果经过的时间是1、3、5,那么看看你在做什么。显然,平均值应该是1、2和3。您将得到(EventCount=1;AverageMS=1)。然后你会得到EventCount=2,AverageMS加上3,然后除以2,所以Average是(1+3)/2=2。然后EVentCount变为3,平均MS=(2+5)/3=2.333(现在出错,应该是3)。如果下一个是3,则平均值为(2.333+3)/4=1.3333
只需将计数和运行总数分开即可解决问题。这可能是因为您计算平均值的公式完全错误。除此之外,像这样的
while(true)
循环是一种相当糟糕的方式-您的CPU一定会出问题。而且,EventTriggered
是如何重置的?您可以发布其余的代码吗?如果我们看到了您试图获取平均时间的代码,我们将能够更好地提供帮助。