Maison >développement back-end >C++ >Pourquoi la division entière en C donne-t-elle zéro lorsqu'elle est stockée dans une variable double ?
Une division entière donne un zéro surprenant dans une variable double
En essayant de calculer une division simple (3/5), vous pouvez rencontrer des résultats inattendus . Même si le résultat est stocké dans une variable à double précision, le résultat peut apparaître de manière erratique comme étant nul. Pour percer ce mystère, étudions le mécanisme sous-jacent :
Dans l'extrait de code fourni, le dividende (3) et le diviseur (5) sont des nombres entiers. Par défaut, C interprète cette division comme une division entière, ce qui arrondit le résultat et ignore la partie fractionnaire. Dans ce cas, 3 divisé par 5 donne 0, comme prévu dans une division entière.
Pour résoudre ce problème et obtenir la division en virgule flottante souhaitée, nous devons nous assurer qu'au moins un des opérandes est représenté comme un vrai numéro. Ceci peut être réalisé en ajoutant ".0" au diviseur ou au dividende :
double f = 3.0 / 5; // Explicitly making the dividend a real number // or double f = 3 / 5.0; // Explicitly making the divisor a real number
En convertissant l'un des opérandes en nombre réel, nous forçons le compilateur à effectuer une division en virgule flottante. Cela garantit que la partie fractionnaire est préservée et que le résultat correct (0,6 dans ce cas) est stocké dans la variable f.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!