-1
這是我第一次嘗試使用秒錶來衡量代碼的性能,我不知道什麼是錯的。我想檢查是否有差異時投擲加倍以整數計算平均值。秒錶給出隨機結果
public static double Avarage(int a, int b)
{
return (a + b + 0.0)/2;
}
public static double AvarageDouble(int s, int d)
{
return (double)(s + d)/2;
}
public static double AvarageDouble2(int x, int v)
{
return ((double)x + v)/2;
}
代碼以測試這些3種方法,使用秒錶:
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
var ret = Avarage(2, 3);
}
sw.Stop();
Console.Write("Using 0.0: " + sw.ElapsedTicks + "\n");
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
var ret2 = AvarageDouble(2, 3);
}
sw.Stop();
Console.Write("Using Double(s+d): " + sw.ElapsedTicks + "\n");
sw.Reset();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
var ret3 = AvarageDouble2(2, 3);
}
sw.Stop();
Console.Write("Using double (x): " + sw.ElapsedTicks + "\n");
它顯示隨機結果,一旦平均是fastets,其他時間AverageDouble或AverageDouble2。我使用差異變量名稱,但看起來沒有關係。
我錯過了什麼?
PS。以兩個整數作爲輸入計算平均值的最佳方法是什麼?
你是什麼意思*隨機*結果?這對我來說是按預期工作的 –
沒有區別,所有這三個版本都要求處理器執行完全相同的機器代碼指令。你看到的是處理器不確定地執行代碼。在多任務操作系統上運行它是非常重要的一部分,你的程序不是唯一運行的代碼。但是它低到處理器本身的程度,例如它受到處理器確切位置的影響內存中的代碼和緩存的狀態。 –