Quel est le moyen le plus performant de diviser deux valeurs intégrales et d’obtenir un quotient à virgule flottante dans .NET?

StackOverflow https://stackoverflow.com/questions/283377

Question

Considérez la signature suivante en C #:

double Divide(int numerator, int denominator);

Existe-t-il une différence de performances entre les implémentations suivantes?

return (double)numerator / denominator;

return numerator / (double)denominator;

return (double)numerator / (double)denominator;

Je suppose que les deux réponses ci-dessus donnent la même réponse.

Ai-je manqué une autre solution équivalente?

Était-ce utile?

La solution

Avez-vous essayé de comparer le livre d’accès (par exemple, avec 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; }

Tous les trois deviennent (donnez ou prenez le nom):

.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
}

Donc non: il y a exactement une différence de zéro.

Autres conseils

Même si vous utilisez VB.NET, le numérateur et le dénominateur sont convertis en doubles avant d'effectuer la division, vos exemples sont donc identiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top