Résultats différents lors du transtypage de int et const int à float

Quelqu’un pourrait-il être en mesure d’expliquer pourquoi int et const int donnent des résultats différents lorsqu’ils sont convertis en float et utilisés en calcul à virgule flottante? Voir par exemple ce morceau de code:

int _tmain(int argc, _TCHAR* argv[]) { int x = 1000; const int y = 1000; float fx = (float) x; float fy = (float) y; printf("(int = 1000) * 0.3f = %4.10f \n", 0.3f*x); printf("(const int = 1000) * 0.3f = %4.10f \n", 0.3f*y); printf("(float)(int = 1000) * 0.3f = %4.10f \n", 0.3f*fx); printf("(float)(const int = 1000) * 0.3f = %4.10f \n", 0.3f*fy); return 0; } 

Le résultat est:

 (int = 1000) * 0.3f = 300.0000119209 (const int = 1000) * 0.3f = 300.0000000000 (float)(int = 1000) * 0.3f = 300.0000119209 (float)(const int = 1000) * 0.3f = 300.0000119209 

Je suppose que dans le premier cas, 0.3f * (int) est implicitement converti en float, alors que dans le second cas, 0.3f * (const int) est implicitement converti en double. Est-ce correct et si oui pourquoi cela se produit-il? Aussi, quelle est la “bonne” approche?

Merci beaucoup

La compilation de deux constantes peut être effectuée par le compilateur avant même la génération du code. Le rest doit être fait au moment de l’exécution.