Ich habe eine Frage über den Vergleich der Geschwindigkeit von Vector.Length und Math.sqrt. Ich habe den folgenden Code zum Vergleichen der Geschwindigkeit verwendet.Warum ist die vector.Length schneller als 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);
Ergebnis:
Vector : 00:00:00.0019342
Sqrt : 00:00:00.0041913
Das Ergebnis zeigt, dass Vector.Length
schneller als Math.Sqrt()
ist. Ich denke, Vector.Length
berechnet Länge mit Math.Sqrt()
auch. dann ist Vector.Length
gleich oder langsamer als Math.Sqrt()
. Warum unterscheidet es sich von dem, was ich denke? Wie wird Vector.Length berechnet?
Ich denke, Grund ist, weil in Mathe ist es ratsam, Quadrate als tatsächliche Zahlen. Am Ende fügt man einfach eins hinzu und wendet Sqrt auf das Ergebnis an. – eocron
Sie müssen den JIT auch zuerst "aufwärmen", indem Sie den Code ausführen, an dem Sie die Leistung messen. –
Sie vergleichen Äpfel und Orangen. Sie wissen nicht, was der Compiler in Bezug auf die Optimierung Ihres Codes tut ... nur um zu beginnen. – Fildor