What's the most performant way to divide two integral values and obtain a floating point quotient in .NET?
-
08-07-2019 - |
Question
Consider the following signature in C#:
double Divide(int numerator, int denominator);
Is there a performance difference between the following implementations?
return (double)numerator / denominator;
return numerator / (double)denominator;
return (double)numerator / (double)denominator;
I'm assuming that both of the above return the same answer.
Have I missed any other equivalent solution?
Solution
Have you tried comparing the IL (for example, with Reflector)?
static double A(int numerator, int denominator)
{ return (double)numerator / denominator; }
static double B(int numerator, int denominator)
{ return numerator / (double)denominator; }
static double C(int numerator, int denominator)
{ return (double)numerator / (double)denominator; }
All three become (give or take the name):
.method private hidebysig static float64 A(int32 numerator, int32 denominator) cil managed
{
.maxstack 8
L_0000: ldarg.0 // pushes numerator onto the stack
L_0001: conv.r8 // converts the value at the top of the stack to double
L_0002: ldarg.1 // pushes denominator onto the stack
L_0003: conv.r8 // converts the value at the top of the stack to double
L_0004: div // pops two values, divides, and pushes the result
L_0005: ret // pops the value from the top of the stack as the return value
}
So no: there is exactly zero difference.
OTHER TIPS
Even if you use VB.NET, both numerator and denominator are converted to doubles before doing the actual division, so your examples are the same.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow