J'ai codé quelques trucs de calcul (j'ai copié ci-dessous un exemple vraiment simplifié de ce que j'ai fait) comme CASE2 et j'ai obtenu de mauvais résultats. Refactorisé le code comme CASE1 et a bien fonctionné. Je sais qu'il y a une distribution implicite dans CASE 2, mais pas sûr de la raison complète. Tout le monde pourrait m'expliquer ce qui se passe exactement ci-dessous?Explication de casting/conversion int/double en C#
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia/2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6)/2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0)/2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6)/2.0;
Je pense que/2 dans CASE2 est coulée (5 + 6) int et provoquant cycle de division à 5, puis coulé à nouveau pour doubler et converti en 5,0. CASE3 et CASE 4 résout également le problème.
En note; il y a seulement * une * opération effectuée à l'exécution ici. Le '/ 2' dans le cas 1. Le reste est tout fait par le compilateur. –
@Marc: le compilateur ne peut-il pas exécuter le cas 1 entièrement au moment de la compilation, puisque 'auxMedia' est local et affecté d'une constante? Ou s'agit-il d'une optimisation laissée strictement au JIT? –
@Michael - J'attendrais * que cela soit laissé au JIT. Pour y répondre, vous devez regarder différentes sorties du compilateur ... –