Какой самый эффективный способ разделить два целых значения и получить коэффициент с плавающей запятой в .NET?
-
08-07-2019 - |
Вопрос
Рассмотрим следующую подпись в C #:
double Divide(int numerator, int denominator);
Есть ли разница в производительности между следующими реализациями?
return (double)numerator / denominator;
return numerator / (double)denominator;
return (double)numerator / (double)denominator;
Я предполагаю, что оба приведенных выше возвращают один и тот же ответ.
Я пропустил какое-либо другое эквивалентное решение?
Решение
Вы пытались сравнить IL (например, с 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; }
Все три становятся (дать или взять имя):
.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
}
Так что нет: разница точно нулевая.
Другие советы
Даже если вы используете VB.NET, числитель и знаменатель перед фактическим делением преобразуются в двойные, поэтому ваши примеры совпадают.
Не связан с StackOverflow