Folks,Comparer les doublons dans Visual Studio - un moyen standard pour attraper cela?
Même les programmeurs expérimentés écrivent du code C# comme celui-ci parfois:
double x = 2.5;
double y = 3;
if (x + 0.5 == 3) {
// this will never be executed
}
Fondamentalement, il est de notoriété publique que deux doubles (ou flotteurs) ne peuvent jamais être exactement égale à l'autre, à cause de la manière l'ordinateur gère l'arithmétique à virgule flottante. Le problème, c'est que tout le monde le sait, mais le code comme celui-ci est toujours partout. C'est tellement facile à oublier.
Questions pour vous:
- Comment avez-vous traité dans votre organisation de développement?
- Est-ce une chose si commune que le compilateur devrait vérifier que nous devrions tous crier vraiment fort pour VS2010 d'inclure un avertissement de compilation si quelqu'un compare deux doubles/flotteurs?
MISE À JOUR: Folks, merci pour les commentaires. Je tiens à préciser que je comprends très certainement que le code ci-dessus est incorrect. Oui, vous ne voulez jamais == comparer les doubles et les flotteurs. Au lieu de cela, vous devez utiliser la comparaison basée sur epsilon. Cela est évident. La vraie question ici est «comment cerner le problème» et non «comment résoudre le problème technique».
Vous avez choisi * un autre * mauvais exemple. Encore une fois, cela sera toujours exécuté. Je suggère que lorsque vous choisissez votre prochain exemple, vous l'essayiez avant de poster ... –
(Et vous pourriez vouloir supprimer l'affirmation erronée que "deux doubles ne peuvent jamais être exactement égaux les uns aux autres" aussi. prétendre que quelque chose est "de notoriété publique" et prétendre que vous comprenez réellement tout cela, il vaudrait la peine de vérifier tout ce que vous écrivez pour vous assurer qu'il est exact. " –
En effet, si les nombres à virgule flottante ne peuvent JAMAIS être exactement égaux, il serait probablement plus facile parce que tous les développeurs seraient au courant du problème –