## C Sharp Performance Tests: Squaring Numbers

The semester 2 coursework has begun, and this time there is a choice of either make a game to a specification, or produce a business related application to a specification. I have chosen the game.

To start off, I started writing a few mathematical functions that I would need when ewriting the game itself. I quickly found that one of things you do rather a lot is squaring numbers. In C♯ I have found 2 ways to square a number so far: `a*a`

and `Math.Pow(a, 2)`

, where `a`

is a number.

Even though it probably doesn't matter about the speed at which we square numbers (there are much better optimisations to make), I decided to test it anyway. I wrote this program:

```
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("This program tests the performance of squaring numbers.\n");
Console.WriteLine("Iterations | a*a Time | Math.Pow(a, 2) Time");
Console.WriteLine("-----------|----------|--------------------");
int iterations = 100000;
double number = 3092d;
double result;
while(true)
{
Stopwatch timera = Stopwatch.StartNew();
for(int i = 0; i < iterations; i++)
{
result = number*number;
}
timera.Stop();
Stopwatch timerb = Stopwatch.StartNew();
for(int i = 0; i < iterations; i++)
{
result = Math.Pow(number, 2);
}
timerb.Stop();
Console.WriteLine(" {0,9} | {1,8} | {2}", iterations, timera.ElapsedMilliseconds.ToString(), timerb.ElapsedMilliseconds.ToString());
iterations += 100000;
System.Threading.Thread.Sleep(500); // make sure that we don't crash the server
}
}
}
```

*I didn't have a Windows Machine handy when writing this post, so the binary has been compiled with mono's dcms. Please leave a comment below if it doesn't work for you.*

Everything is done with `double`

s to maek it a fair test because C♯'s `Math.Pow`

method will only accept a `double`

. The code sleeps for half a second between runs because I was writing this on the server that is serving the websitee, and I didn't want to crash it by accident :)

The results were rather shocking. The easiest way to display the results is in a graph:

A pastebin of the results can be found here.

As you can quite clearly see, `Math.Pow()`

is horribly inefficient compared to just multiplying a number by itself. Next time I am squaring numbers, I won't be using `Math.Pow`

again.