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


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


source


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


source







All Articles