Why
Because I've lately started to think a little more functional, this also allows for nice chaining of calls to the Math class.
How to use
Say you want to calculate the angle between 2 vectors by taking arc cosine of our dot product to give us the angle:
With normal Math usage..
var dot = vector1.X* vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z;
double radians = Math.Acos(dot);
Same example with our extensions
var dot = vector1.X* vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z;
double radians = dot.Acos();
The above example but with a method to calculate the dot product.
double radians = vector1.Dot(vector2).Acos();
Code for your pleasure
public static class MathExtensions
{
public static decimal Abs(this decimal d)
{
return Math.Abs(d);
}
public static float Abs(this float d)
{
return Math.Abs(d);
}
public static double Abs(this double d)
{
return Math.Abs(d);
}
public static int Abs(this int d)
{
return Math.Abs(d);
}
public static long Abs(this long d)
{
return Math.Abs(d);
}
public static short Abs(this short d)
{
return Math.Abs(d);
}
public static short Abs(this byte d)
{
return Math.Abs(d);
}
public static decimal Max(this decimal d, decimal x)
{
return Math.Max(d, x);
}
public static float Max(this float d, float x)
{
return Math.Max(d, x);
}
public static double Max(this double d, double x)
{
return Math.Max(d, x);
}
public static int Max(this int d, int x)
{
return Math.Max(d, x);
}
public static long Max(this long d, long x)
{
return Math.Max(d, x);
}
public static short Max(this short d, short x)
{
return Math.Max(d, x);
}
public static short Max(this byte d, byte x)
{
return Math.Max(d, x);
}
public static decimal Min(this decimal d, decimal x)
{
return Math.Min(d, x);
}
public static float Min(this float d, float x)
{
return Math.Min(d, x);
}
public static double Min(this double d, double x)
{
return Math.Min(d, x);
}
public static int Min(this int d, int x)
{
return Math.Min(d, x);
}
public static long Min(this long d, long x)
{
return Math.Min(d, x);
}
public static short Min(this short d, short x)
{
return Math.Min(d, x);
}
public static short Min(this byte d, byte x)
{
return Math.Min(d, x);
}
public static int Sign(this decimal d)
{
return Math.Sign(d);
}
public static int Sign(this float d)
{
return Math.Sign(d);
}
public static int Sign(this double d)
{
return Math.Sign(d);
}
public static int Sign(this int d)
{
return Math.Sign(d);
}
public static int Sign(this long d)
{
return Math.Sign(d);
}
public static int Sign(this short d)
{
return Math.Sign(d);
}
public static int Sign(this byte d)
{
return Math.Sign(d);
}
public static decimal Floor(this decimal d)
{
return Math.Floor(d);
}
public static double Floor(this float d)
{
return Math.Floor(d);
}
public static double Floor(this double d)
{
return Math.Floor(d);
}
public static decimal Round(this decimal d)
{
return Math.Round(d);
}
public static decimal Round(this decimal d, int x)
{
return Math.Round(d, x);
}
public static decimal Round(this decimal d, int x, MidpointRounding mr)
{
return Math.Round(d, x, mr);
}
public static decimal Round(this decimal d, MidpointRounding mr)
{
return Math.Round(d, mr);
}
public static double Round(this float d)
{
return Math.Round(d);
}
public static double Round(this double d)
{
return Math.Round(d);
}
public static double Round(this double d, int x)
{
return Math.Round(d, x);
}
public static double Round(this double d, int x, MidpointRounding mr)
{
return Math.Round(d, x, mr);
}
public static double Round(this double d, MidpointRounding mr)
{
return Math.Round(d, mr);
}
public static decimal Ceiling(this decimal d)
{
return Math.Ceiling(d);
}
public static double Ceiling(this float d)
{
return Math.Ceiling(d);
}
public static double Ceiling(this double d)
{
return Math.Ceiling(d);
}
public static double Acos(this double d)
{
return Math.Acos(d);
}
public static double Asin(this double d)
{
return Math.Asin(d);
}
public static double Atan(this double d)
{
return Math.Atan(d);
}
public static double Atan2(this double d, double x)
{
return Math.Atan2(d, x);
}
public static double Cos(this double d)
{
return Math.Cos(d);
}
public static double Cosh(this double d)
{
return Math.Cosh(d);
}
public static double Exp(this double d)
{
return Math.Exp(d);
}
public static double Sin(this double d)
{
return Math.Sin(d);
}
public static double Sinh(this double d)
{
return Math.Sinh(d);
}
public static double Tan(this double d)
{
return Math.Tan(d);
}
public static double Tanh(this double d)
{
return Math.Tanh(d);
}
public static long BigMul(this int a, int b)
{
return Math.BigMul(a, b);
}
public static double IEEERemainder(this double d, double y)
{
return Math.IEEERemainder(d, y);
}
public static double Log(this double d)
{
return Math.Log(d);
}
public static double Log(this double d, double x)
{
return Math.Log(d, x);
}
public static double Log10(this double d)
{
return Math.Log10(d);
}
public static double Sqrt(this double d)
{
return Math.Sqrt(d);
}
public static decimal Truncate(this decimal d)
{
return Math.Truncate(d);
}
public static double Truncate(this double d)
{
return Math.Truncate(d);
}
public static double Pow(this double d, double power)
{
return Math.Pow(d, power);
}
}
Quite a lot of overloads, I think I got them all but if you find that I've missed one, please comment on this post and I will add it!
All code provided as-is. This is copied from my own code-base, May need some additional programming to work. Use for whatever you want, how you want! If you find this helpful, please leave a comment, not required but appreciated! :)
Hope this helps someone out there!