using System;
using System.Diagnostics;
public class Test
{
private const int TEST_COUNT = 10000000;
private static double[] xs;
private static double[] ys;
private static double a;
private static double l;
private static double x;
private static double y;
private static void Reset()
{
for (var i = 0; i < TEST_COUNT; i++)
{
xs[i] = 100;
ys[i] = 100;
}
}
public static void Main(string[] args)
{
var sw = new Stopwatch();
xs = new double[TEST_COUNT];
ys = new double[TEST_COUNT];
// test 1
Reset();
sw.Reset();
sw.Start();
for (var i = 0; i < TEST_COUNT; i++)
{
x = xs[i];
y = ys[i];
a = Math.Atan2(y, x);
l = Math.Sqrt(x * x + y * y);
xs[i] = (l - 10) * Math.Cos(a);
ys[i] = (l - 10) * Math.Sin(a);
}
var test1 = sw.Elapsed;
// test 2
Reset();
sw.Reset();
sw.Start();
for (int i = 0; i < TEST_COUNT; i++)
{
x = xs[i];
y = ys[i];
l = Math.Sqrt(x * x + y * y);
xs[i] = (l - 10) * (x / l);
ys[i] = (l - 10) * (y / l);
}
var test2 = sw.Elapsed;
Console.WriteLine("test1: " + (test1.TotalMilliseconds / TEST_COUNT * 1000000).ToString("0.00") + "ns/op");
Console.WriteLine("test2: " + (test2.TotalMilliseconds / TEST_COUNT * 1000000).ToString("0.00") + "ns/op");
Console.ReadKey(true);
}
}