What's the most efficient way to split two integral values ββand get a floating point factor in .NET?
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 guess both of them will return the same answer.
Have I missed any other equivalent solution?
+1
Drew noakes
source
to share
2 answers
Have you tried comparing IL (with Reflector for example )?
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 a 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
}
No, no: the difference is exactly zero.
+5
Marc gravell
source
to share
Even if you are using VB.NET, both the numerator and denominator are converted to doubles before doing the actual division, so your examples are the same.
+1
Maxam
source
to share