私は、Vector.LengthとMath.sqrtの速度を比較することに関して質問があります。 速度を比較するために次のコードを使用しました。なぜvector.LengthはMath.sqrt()より速いのですか?
int cnt = 100000;
double result = 0;
Vector A = new Vector(1.342,2.0);
Vector B = new Vector(5.1234,2.0);
Stopwatch sw = new Stopwatch();
sw.Start();
while(cnt-- > 1)
{
Vector AB = A-B;
result = AB.Length;
}
sw.Stop();
System.Console.WriteLine("Vector : " + sw.Elapsed);
sw.Reset();
cnt = 100000;
sw.Start();
while(cnt-- >1)
{
result = Math.Sqrt((B.X-A.X)*(B.X-A.X)+(B.Y-A.Y)*(B.Y-A.Y));
}
sw.Stop();
System.Console.WriteLine("Sqrt : " + sw.Elapsed);
結果:
Vector : 00:00:00.0019342
Sqrt : 00:00:00.0041913
結果はVector.Length
がMath.Sqrt()
よりも高速であることを示しています。 Vector.Length
はMath.Sqrt()
でも長さを計算すると思います。 Vector.Length
はMath.Sqrt()
と等しいか遅いです。 なぜ私の考えと違うのですか? Vector.Lengthの計算方法は?
私は、数学では実際の数よりも正方形であることが賢明だからだと思います。だから最後にあなたは別のものを追加し、結果にSqrtを適用します。 – eocron
パフォーマンスを測定しているコードを実行して、JITを最初に "ウォームアップ"する必要があります。 –
あなたはリンゴとオレンジを比較しています。コンパイラがコードの最適化に関して何をしているのかわかりません。 – Fildor